Radix树 Radix树,即基数树,也称压缩前缀树,是一种提供key-value存储查找的数据结构。与Trie不同的是,它对Trie树进行了空间优化,只有一个子节点的中间节点将被压缩。同样的,Radix树的插入、查询、删除操作的时间复杂度都为O(k)。 Radix树特点 一般由根节点、中间节点和叶 Read More
posted @ 2018-11-12 14:12 浅尝辄止易初心不改难 Views(832) Comments(0) Diggs(0) Edit
红黑树 红黑(Red-black)树是一种自平衡二叉查找树,1972年由Rudolf Bayer发明,它与AVL树类似,都在插入和删除操作时能通过旋转操作保持二叉查找树的平衡,以便能获得高效的查找性能。 它可以在 时间内做查找,插入和删除等操作。红黑树是2-3-4树的一种等同,但有些红黑树设定只能左 Read More
posted @ 2018-11-12 14:11 浅尝辄止易初心不改难 Views(284) Comments(0) Diggs(0) Edit
关于LSM树 LSM树,即日志结构合并树(Log-Structured Merge-Tree)。其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想。大多NoSQL数据库核心思想都是基于LSM来做的,只是具体的实现不同。所以本来不打算列入该系列,但是有朋友留言了好几次让我讲LSM树,那么 Read More
posted @ 2018-11-12 14:10 浅尝辄止易初心不改难 Views(520) Comments(0) Diggs(0) Edit
快速排序 快速排序由C.A.R.Hoare在1962年提出,是冒泡排序的一种改进。其基本思想为:通过一趟排序将待排序数据分割成独立的两部分,其中一部分的所有值都比另一部分的所有值都小,然后再对分割的两部分分别进行快速排序,整个过程可以递归进行,最终所有数据变为有序序列。 排序要点 设待排序数组为a[ Read More
posted @ 2018-11-12 14:08 浅尝辄止易初心不改难 Views(229) Comments(0) Diggs(0) Edit
合并排序 合并排序也叫归并排序,它的主要思想是分治法,把待排序序列分为若干有序子序列,然后将两个或两个以上的有序子序列进行合并,得到一个新的完整的有序序列。所以首先得先对子序列进行排序,得到有序子序列,然后再使序列段之间有序。 排序要点 既然是分治法,那么就涉及到分和治。分,即递归地将序列分成小序列 Read More
posted @ 2018-11-12 14:06 浅尝辄止易初心不改难 Views(183) Comments(0) Diggs(0) Edit
希尔排序 希尔排序是希尔(Donald Shell)提出的一种排序方法,也属于插入排序,但是简单插入排序的高效版本,也称为缩小增量排序。基本思想是将待排序元素进行增量分组,然后在分组组内进行插入排序,随着增量的减少,每个分组组内的元素越来越多,直至增量减至1时,所有元素都分到同一个组内,执行插入排序 Read More
posted @ 2018-11-12 14:05 浅尝辄止易初心不改难 Views(172) Comments(0) Diggs(0) Edit
Trie树 Trie树,是一种搜索树,也称字典树或单词查找树,此外也称前缀树,因为某节点的后代存在共同的前缀。它的key都为字符串,能做到高效查询和插入,时间复杂度为O(k),k为字符串长度,缺点是如果大量字符串没有共同前缀时很耗内存。它的核心思想就是减少没必要的字符比较,使查询高效率,即用空间换时 Read More
posted @ 2018-11-12 14:03 浅尝辄止易初心不改难 Views(149) Comments(0) Diggs(0) Edit
冒泡排序 冒泡排序是一种很简单的排序算法,主要思想就是不断走访待排序序列,每次只比较两个相邻元素,如果这俩元素顺序不符合要求则对换它们,不断重复知道没有相邻元素需要对换。在不断走访比较过程中,越大的元素经过交换会慢慢走到数列顶端,所以看起来它就像气泡一样不断往上冒,于是就叫冒泡。 排序要点 比较相邻 Read More
posted @ 2018-11-12 14:01 浅尝辄止易初心不改难 Views(122) Comments(0) Diggs(0) Edit
删除操作 删除操作比较复杂,主要是因为删除的项可能在叶子节点上也可能在非叶子节点上,而且删除后可能导致不符合B树的规定,这里暂且称之为导致B树不平衡,于是要进行一些合并、左旋、右旋等操作,使之符合B树的规定(即让B树平衡)。另外,如果是删除非叶子节点项需要先找到中序前驱来替换。 情况一 要删除的项在 Read More
posted @ 2018-11-12 14:00 浅尝辄止易初心不改难 Views(1270) Comments(0) Diggs(0) Edit
B+树 B+树是B树的一种变体,也属于平衡多路查找树,大体结构与B树相同,包含根节点、内部节点和叶子节点。多用于数据库和操作系统的文件系统中,由于B+树内部节点不保存数据,所以能在内存中存放更多索引,增加缓存命中率。另外因为叶子节点相连遍历操作很方便,而且数据也具有顺序性,便于区间查找。 B+树特点 Read More
posted @ 2018-11-12 13:59 浅尝辄止易初心不改难 Views(210) Comments(0) Diggs(0) Edit
B树 B树即平衡查找树,一般理解为平衡多路查找树,也称为B-树、B_树。是一种自平衡树状数据结构,能对存储的数据进行O(log n)的时间复杂度进行查找、插入和删除。B树一般较多用在存储系统上,比如数据库或文件系统。 B树特点 B树可以定义一个m值作为预定范围,即m路(阶)B树。 每个节点最多有m个 Read More
posted @ 2018-11-12 13:57 浅尝辄止易初心不改难 Views(229) Comments(0) Diggs(0) Edit
2-3树 2-3树,是最简单的B-树,其中2、3主要体现在每个非叶子节点都有2个或3个子节点,B-树即是平衡树,平衡树是为了解决不平衡树查询效率问题,常见的二叉平衡书有AVL树,它虽然提高了查询效率,但是插入操作效率不高,因为它需要再每次插入节点后维护树的平衡,而为了解决查询效率同时有兼顾插入效率, Read More
posted @ 2018-11-12 13:56 浅尝辄止易初心不改难 Views(251) Comments(0) Diggs(0) Edit
选择排序 选择排序是一种很简单直观的排序算法,主要思想就是每次从待排序的元素中选择出最大或最小的那个元素,然后将其放至已排序序列的末尾,直到全部待排序序列都排序完毕。 排序要点 初始状态时,待排序序列为a1,a2,...an,已排序序列为空。 第一趟排序,从待排序序列中找到最大或最小元素ak,将其与 Read More
posted @ 2018-11-12 12:59 浅尝辄止易初心不改难 Views(123) Comments(0) Diggs(0) Edit
AVL树 AVL树,也称平衡二叉搜索树,AVL是其发明者姓名简写。AVL树属于树的一种,而且它也是一棵二叉搜索树,不同的是他通过一定机制能保证二叉搜索树的平衡,平衡的二叉搜索树的查询效率更高。 AVL树特点 AVL树是一棵二叉搜索树。 AVL树的左右子节点也是AVL树。 AVL树拥有二叉搜索树的所有 Read More
posted @ 2018-11-12 12:58 浅尝辄止易初心不改难 Views(246) Comments(0) Diggs(0) Edit
栈 栈是一种线性存储结构且运算受限的线性表,它的插入和删除运算操作被限制在表的一端,该端称为栈顶,而另外一端则称为栈底。 栈中的数据以后进先出(Last In First Out 即LIFO)方式进出栈。 栈的实现 栈的实现方式有多种方式,主要是使用不同的结构来存储栈元素,比如使用数组、单向链表、双 Read More
posted @ 2018-11-12 12:56 浅尝辄止易初心不改难 Views(111) Comments(0) Diggs(0) Edit
关于树 对于树的数据结构大家都了解,只是树的类型有很多,所以可能又会对树产生一种陌生感。树其实就是由有限n(n>=1)个节点组成的一个具有层次关系的集合,它看起来像一棵倒挂的树,所以称之为“树”。 树的特点 每个节点有若干个或0个子节点; 根节点没有父节点; 每一个非根节点有且只有一个父节点; 每个 Read More
posted @ 2018-11-12 12:53 浅尝辄止易初心不改难 Views(169) Comments(0) Diggs(0) Edit
双向链表 双向链表属于链表的一种,也叫双链表双向即是说它的链接方向是双向的,它由若干个节点组成,每个节点都包含下一个节点和上一个节点的指针,所以从双向链表的任意节点开始,都能很方便访问他的前驱结点和后继节点。 双链表特点 创建双链表时无需指定链表的长度。 比起单链表,双链表需要多一个指针用于指向前驱 Read More
posted @ 2018-11-12 12:50 浅尝辄止易初心不改难 Views(265) Comments(0) Diggs(0) Edit
单向链表 单向链表属于链表的一种,也叫单链表,单向即是说它的链接方向是单向的,它由若干个节点组成,每个节点都包含下一个节点的指针。 单链表特点 创建单链表时无需指定链表的长度,这个比起数组结构更加有优势,而数组纵使实现成动态数组也是需要指定一个更大的数组长度,而且要把原来的数组元素一个个复制到新数组 Read More
posted @ 2018-11-12 12:48 浅尝辄止易初心不改难 Views(252) Comments(0) Diggs(0) Edit
数组 数组是最熟悉也是最基础的一种结构了,有限个相同数据类型的元素按顺序排列的集合为数组。数组的数据是连续的,有上界下界,在其中的元素都有属于自己的索引值,即下标,通过这些下标就能定位到数组值。 根据维度的不同可以将数组分为一维数组、二维数组、三维数组等等,以此类推。 一维数组 创建一个长度为10的 Read More
posted @ 2018-11-12 12:45 浅尝辄止易初心不改难 Views(131) Comments(0) Diggs(0) Edit