0x01、树与跳表介绍
二分查找需要把元素存储在连续的内存中,查找的速度很快,但是插入、删除操作时需要保证元素有序性而移动大量元素比较耗性能。
如果需要一个有二分查找的速度,又能快速添加和删除元素的数据结构,首先就是二叉树,但是二叉树最坏的情况下可能变成一个链表。
于是出现了平衡二叉树,根据平衡算法不同分为AVL树(平衡二叉树),B-Tree,B+Tree(Balance),红黑树等,但是AVL树实现起来复杂,平衡操作难以理解,这时候可以使用SkipList跳跃表结构。
0x02、B-Tree、B+Tree、红黑树
平衡二叉树(AVL树)在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。下面的两张图片,左边是AVL树,它的任何节点的两个子树的高度差<=1;右边的不是AVL树,其根节点的左子树高度为3,而右子树高度为1;
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块。为了描述B-Tree,首先定义一条记录为一个二元组[key, data] ,key为记录的键值,对应表中的主键值,data为一行记录中除主键外的数据。对于不同的记录,key值互不相同。
一棵m阶的B-Tre