算法
算法
陌隋
这个作者很懒,什么都没留下…
展开
-
哈希情史知多少
简介hash是我们工作中经常听到的词,比如哈希表、哈希函数、hashCode、HashTable、HashMap等等,那么它们之间到底有怎样的爱恨情仇呢?来一起看一看吧~~数组讲哈希表之前,我们先来看看数据结构的鼻祖——数组。数组比较简单,我就不多说了,大家都会都懂,见下图。数组的下标一般从0开始,依次往后存储元素,查找元素也是一样,只能从头(或从尾)依次查找元素。比如,要查找4这个元素,从头开始查找的话需要查找3次,从尾的话也需要2次。早期的哈希表上面讲了数组的缺点,查转载 2020-06-03 08:36:02 · 186 阅读 · 0 评论 -
什么是红黑树(下篇)
之前,我们初步介绍了红黑树存在的意义,以及红黑树的插入操作,点击链直达《什么是红黑树》今天,我们来继续介绍红黑树的删除操作,以及红黑树和其他平衡二叉树的比较。二叉查找树是如何进行删除操作的呢?可以分成三种情况。情况1,待删除的结点没有子结点:上图中,待删除的结点12是叶子结点,没有孩子,因此直接删除即可:情况2,待删除的结点有一个孩子:上图中,待删除的结点13只有左孩子,于是我们让左孩子结点11取代被删除的结点,结点11以下...转载 2020-05-19 10:56:07 · 174 阅读 · 0 评论 -
什么是跳表
什么是跳表跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。跳表详解有序链表考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍历链表,直到查找到元素为止。上述这个链表是有序的,但是不能使用二分查找,是不是很捉急?(P.S.数组可以实现二分查找)那么,有没有什么方法可以实现有序链表的二分查找呢?答案是肯定的,那转载 2020-05-16 19:58:08 · 2500 阅读 · 0 评论 -
什么是堆
堆是一种特殊的树,只要满足下面两个条件,它就是一个堆:(1)堆是一颗完全二叉树;(2)堆中某个节点的值总是不大于(或不小于)其父节点的值。其中,我们把根节点最大的堆叫做大顶堆,根节点最小的堆叫做小顶堆。堆详解满二叉树满二叉树是指所有层都达到最大节点数的二叉树。比如,下面这颗树:完全二叉树完全二叉树是指除了最后一层其它层都达到最大节点数,且最后一层节点都靠左排列。比如,下面这颗树:可见,其实满二叉树是一种特殊的完全二叉树。那么,使用什么结构存储完全二叉树最节省空转载 2020-05-14 18:40:19 · 7624 阅读 · 0 评论 -
深入理解CAS算法原理(进阶篇)
这一篇我们来深入介绍CAS的两个问题: Java当中CAS的底层实现 CAS的ABA问题和解决方法 首先看一看AtomicInteger当中常用的自增方法incrementAndGet:public final int incrementAndGet() { for (;;) { int current = get(); int next = current + 1; if (compare...转载 2020-05-10 15:50:26 · 628 阅读 · 0 评论 -
深入理解CAS算法原理
1、什么是CAS?CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。2、CAS算法理解对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则转载 2020-05-10 11:31:20 · 282 阅读 · 0 评论 -
递归算法
目录:1.简单递归定义2.递归与循环的区别与联系3.递归的经典应用1.简单递归定义什么叫递归?(先定义一个比较简单的说法,为了理解,不一定对)递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。比如说我要你先求一个N!的结果你说我会用循环啊(没错,但是现在是学递归)int factorial(int x,int ans){ if(x==1) return ans; factorial(x-1,a转载 2020-05-09 10:46:09 · 737 阅读 · 0 评论