算法
算法
普通网友
这个作者很懒,什么都没留下…
展开
-
基础运算—&运算(位运算)
给大家举个列子:8的二进制是1000 7的二进制是0111 1000 0111&运算中1&1=1,1&0=0,0&0=0并且按位置对应运算的,也就是说第一位和第一位运算,其他类推所以可以得出0000,故输出的是0。...原创 2019-10-11 16:19:56 · 507 阅读 · 0 评论 -
HashMap,LinkedHashMap,TreeMap的区别(转)
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 HashMap HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null。 HashMap不支持线程的同...转载 2018-07-25 10:25:41 · 421 阅读 · 0 评论 -
MySQL中B+Tree索引原理
转自:http://blog.csdn.net/u013235478/article/details/50625677B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-T...转载 2018-07-13 07:00:30 · 1330 阅读 · 0 评论 -
二叉平衡树的旋转操作
旋转是很多二叉平衡树维持平衡的主要手段,在这里复习一下。其实旋转过程中节点位置的变化只要遵循一个原则就行了:比Root大的在左子树,比Root小的在右子树。(当然这里前提条件是左小右大)。情况一:插入F节点导致失衡:这里失衡的是A的左右子树,很容易就可以想到旋转B-A链,值得注意的是E节点,它原先在B的右子树,现在也依然在B的右子树,它原先在A的左子树,现在也依然在A的左子树。若插入F节点在D的右...转载 2018-07-13 07:00:39 · 435 阅读 · 0 评论 -
浅谈WeakHashMap
Java WeakHashMap 到底Weak在哪里,它真的很弱吗?WeakHashMap 的适用场景是什么,使用时需要注意些什么?弱引用和强引用对Java GC有什么不同影响?本文将给出清晰而简洁的介绍。总体介绍在Java集合框架系列文章的最后,笔者打算介绍一个特殊的成员:WeakHashMap,从名字可以看出它是某种 Map。它的特殊之处在于 WeakHashMap 里的entry可能会被GC...转载 2018-07-12 13:45:47 · 233 阅读 · 0 评论 -
史上最清晰的红黑树讲解(下)
本文github地址上一篇文章史上最清晰的红黑树讲解(上)对Java TreeMap的插入以及插入之后的调整过程给出了详述。本文接着以Java TreeMap为例,从源码层面讲解红黑树的删除,以及删除之后的调整过程。如果还没有看过上一篇文章,请在阅读本文之前大致浏览一下前文,以方便理解。寻找节点后继对于一棵二叉查找树,给定节点t,其后继(树种比大于t的最小的那个元素)可以通过如下方式找到:t的右子...转载 2018-07-12 13:44:12 · 233 阅读 · 0 评论 -
Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMap
Java LinkedHashMap和HashMap有什么区别和联系?为什么LinkedHashMap会有着更快的迭代速度?LinkedHashSet跟LinkedHashMap有着怎样的内在联系?本文从数据结构和算法层面,结合生动图解为读者一一解答。本文github地址总体介绍如果你已看过前面关于HashSet和HashMap,以及TreeSet和TreeMap的讲解,一定能够想到本文将要讲解的...转载 2018-07-12 13:45:07 · 326 阅读 · 0 评论 -
史上最清晰的红黑树讲解(上)
本文github地址本文以Java TreeMap为例,从源代码层面,结合详细的图解,剥茧抽丝地讲解红黑树(Red-Black tree)的插入,删除以及由此产生的调整过程。总体介绍Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(...转载 2018-07-12 13:43:28 · 306 阅读 · 0 评论 -
快速排序
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比...转载 2018-08-07 17:20:15 · 172 阅读 · 0 评论 -
归并排序
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式...转载 2018-08-07 17:28:53 · 237 阅读 · 0 评论 -
二分插入排序
一、折半插入排序(二分插入排序)将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法。在处理A[i]时,A[0]……A[i-1]已经按关键码值排好序。所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故可以在A...转载 2018-08-07 17:43:33 · 803 阅读 · 0 评论 -
冒泡排序
1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。 ...转载 2018-08-07 17:44:46 · 171 阅读 · 0 评论 -
堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,...转载 2018-08-07 17:50:31 · 192 阅读 · 0 评论 -
图解排序算法之堆排序(Java)
原文地址:https://www.cnblogs.com/chengxiao/p/6129630.html堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的...转载 2018-07-23 08:04:46 · 799 阅读 · 0 评论 -
堆排序原理及其实现(C++)
堆排序原理及其实现(C++)1. 堆排序的引入我们知道简单选择排序的时间复杂度为O(n^2),熟悉各种排序算法的朋友都知道,这个时间复杂度是很大的,所以怎样减小简单选择排序的时间复杂度呢?简单选择排序主要操作是进行关键字的比较,所以怎样减少比较次数就是改进的关键。简单选择排序中第i趟需要进行n-i次比较,如果我们用到前面已排好的序列a[1...i-1]是否可以减少比较次数呢?答案是可以的。...转载 2018-07-23 08:01:20 · 680 阅读 · 0 评论