数据结构与算法
XH雪浪风尘
Java咸鱼
展开
-
动态规划算法详解(附带背包问题、机器人不同路径、跳台阶)
前言关于动态规划的一些名词、概念,比如像什么动态转移方程,无后效性,最优子结构啦。我想我们可以先不用看百度出来的解释或者是书本上对这些概念的解释,过于复杂难懂的话,可能就没入门就放弃了。我们以三个例子为基础,将概念带入例子并进行总结,进而初识动态规划。目录前言1、跳台阶2、机器人不同路径3、01背包问题总结1、跳台阶经典蛙兄跳台阶:蛙兄正在上楼梯,楼梯有 n 阶台阶,蛙兄一次可以跳 1 阶或者跳2 阶,计算跳n阶台阶共有多少种方式。分析:我们假设f(n)表示跳n阶可以有多少种方式,而n阶是原创 2020-12-20 20:07:06 · 762 阅读 · 0 评论 -
那些年一起看过的HashMap面试题
前言我们在日常的工作学习中,都会常常用到HashMap,记得在校招面试中,也是基本上多多少少会问到一些关于HashMap的知识点,因此我们对于HashMap也不能仅仅停留在使用get、put操作存取数据,接下来就看看HashMap有哪些常见的问题。了解数据结构中的HashMap么?讲讲你对HashMap的认识这种应该就属于比较基本的问题,根据这个问题来引出之后的问题。HashMap由数组+链表的形式组成,是一个用于存储key-value键值对的集合,在Java7中叫做Entry,在Java8中叫原创 2020-09-20 20:56:48 · 460 阅读 · 0 评论 -
数据结构之HashMap源码详解(五)get、remove、replace方法源码分析
第一篇文章传送门第二篇文章传送门第三篇文章传送门第四篇文章传送门get方法get方法:public V get(Object key) { HashMap.Node e; return (e = this.getNode(hash(key), key)) == null ? null : e.value; }如果e为空,那么就返回null,不...原创 2020-02-09 19:49:10 · 510 阅读 · 0 评论 -
数据结构之HashMap源码详解(四)resize扩容方法源码分析
第一篇文章传送门第二篇文章传送门第三篇文章传送门为什么要扩容当HashMap中的结点少时,进行查询是比较快的,但是当结点越来越多时,Hash表链化严重,复杂度由O(1)变为O(N),大大增加了查询的时间,通过扩容可以缓解该问题。树化后的时间复杂度为O(log N)。...原创 2020-02-09 16:55:24 · 432 阅读 · 0 评论 -
数据结构之HashMap源码详解(三)put方法源码分析
第一篇文章传送门第二篇文章传送门原创 2020-02-08 20:47:22 · 396 阅读 · 0 评论 -
Java实现遗传算法
转载来源::http://blog.csdn.net/xiaojimanman/article/details/50277547 关于遗传算法的详细原理以及具体的定义这里就不多介绍,想了解的可以自行百度,下面就简单介绍下自己对遗传算法的理解,本文对基因的编码采用二进制规则。 算法思想: &nb...转载 2020-02-08 18:02:31 · 713 阅读 · 0 评论 -
数据结构之HashMap源码详解(二)构造方法源码分析
打开开发工具,进入HashMap.class,IDEA中的HashMap源码不允许修改,所以将源码复制到新建的类中进行注解。第一篇文章传送门HashMap核心属性分析/*haspMap默认大小16*/ static final int DEFAULT_INITIAL_CAPACITY = 16; /*最大长度,不可以超过1 << 30,也就是下面的MAX*/ s...原创 2020-02-02 13:02:24 · 408 阅读 · 0 评论 -
数据结构之HashMap详解(一)
在之前有一篇博客简单介绍了HashMap,数据结构之Hash表(哈希表)但是感觉内容不是太多,现在对之前的内容做一个补充。说HashMap之前,看下数组:数组的优点在于查找速度快,每个区域都是紧挨着的,并且有下标,可以根据下标快速找到要查找的元素。缺点:增删麻烦,如果在第二个元素后面再添加个元素的话,那么就需要重新建一个数组,填入对应的信息。链表:每个内存除了存放自身的元素外,还保留下...原创 2020-02-02 11:32:24 · 705 阅读 · 0 评论 -
数据结构之二叉排序树
二叉排序树二叉排序树定义二叉排序树:又称为二叉查找树或者二叉搜索树。它是一棵空树或者是有下列性质的二叉树:1、若左子树不空,则左子树上所有结点的值均小于它的跟结构的值;2、若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。3、它的左、右子树也分别为二叉排序树。二叉排序树的检索时间与二叉排序树的结构也有关系:当所有结点都位于左子树或者右子树时,检索时间最长:此时检索时间最...原创 2020-01-07 15:19:30 · 469 阅读 · 0 评论 -
数据结构之堆(heap)
首先值得一提的是,我们说的数据结构中的堆和内存中的堆是两个不同的东西,关于这点不要混淆两者,以为两个是相同的东西。堆的定义那么,数据结构中的堆到底是什么呢?堆的底层原理就是完全二叉树,完全二叉树?什么是完全二叉树?先看一个完全二叉树完全二叉树;除了最底层,其余层都是满的,并且最后一层的结点都是从左向右排序。或者最后一层也是满的。堆就是由数组实现的二叉树,可以说堆一定是完全二叉树,而完全二...原创 2020-01-07 10:10:23 · 610 阅读 · 0 评论 -
数据结构之B树与B+树
在了解B树与B+树之前,需要先了解点别的知识。多路查找树:每一个结点的孩子数可以多于两个,且每一个结点处可以存储多个元素。每一个结点可以存储多少个元素,以及它的孩子数的多少是非常关键的。B树与B+树就是它的特殊形式。为了更好了解B树,先来看下2-3树和2-3-4树2-3树2-3树是这样的一棵多路查找树:每个结点都具有两个孩子(我们称它为2结点)或三个孩子(我们称它为3结点)一个2结点包含...原创 2020-01-06 20:13:46 · 640 阅读 · 0 评论 -
数据结构之Hash表(哈希表)
参考书籍:大话数据结构一、Hash表定义在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置。查找的时候,根据这个确定的对应关系找到给定值key的映射f(key)。类似于中学数学中的函数,通过某种关系,一个x对应一个y值。y=f(x)。我们将这里的对应关系f称为散列函数,也可以称为哈希函数。采用这种散列技术将记录存储在一块连续的存储空间中,这块连续...原创 2020-01-02 17:33:01 · 1340 阅读 · 1 评论 -
十大排序算法(Java实现)没入门就放弃
前言花了将近一天的时间复盘了一下常用的十大排序算法,涉及到的内容也是蛮多的,如果有哪些地方有错误,希望大佬们多多指点指点。术语解释这里涉及到了一些名词:时间复杂度、空间复杂度等,那么,这是什么意思?时间复杂度:执行一个算法所需要的时间。空间复杂度:运行完一个算法所需要的内存空间。稳定性:假如a==b,并且未排序时,a在b的前面,排序结束后,a仍在b的前面,那么我们就称之为稳定。...原创 2019-10-03 23:15:25 · 412 阅读 · 1 评论