二叉查找树、
2-3
树以及它的实现红黑树。
2-3
树中,一个结点最多能有两个
key
,它的实现红
黑树中使用对链接染色(红或黑)的方式去表达这两个
key
。
B树
而B树这种树型结构,一个结点允许多于两个key的存在。
(1)每个结点最多有
M-1
个
key
,并且以升序排列;
(2)每个结点最多能有
M
个子结点;
(3)根结点至少有两个子结点;
在实际应用中
B
树的阶数一般都比较大(通常M大于
100
),所以,即
使存储大量的数据,B树的高度仍然比较小,这样查询的效率非常高
。
B树的插入,也是往上提作为父节点(41),
即形成5键的时候,把中间的键往上提。
B树在磁盘文件中的应用
在文件系统中就使用到了
B
树这种数据结构。
为了提高效率,磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),因此预读可以提高I/O效率。
页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(1024个字节或其整数倍),预读的长度一般为页的整倍数。
文件系统的设计者利用了磁盘预读原理,将一个结点的大小设为等于一个页(1024个字节或其整数倍),这样每个结点只需要一次I/O就可以完全载入。那么3层的B树可以容纳1024*1024*1024差不多10亿个数据,如果换成二叉查找树,则需要30层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在10亿个数据中查找目标值,只需要小于3次硬盘读取就可以找到目标值,但红黑树需要小于30次,因此B树大大提高了IO的操作效率。
B+树
B+
树是对
B
树的一种变形树,它与
B
树的差异在于:
1.
非叶结点仅具有索引作用,也就是说,非叶子结点只存储
key,不存储value
;
2.
树的所有叶结点构成一个有序链表,可以按照
key
排序的次序遍历全部数据。
B+树和B树对比
B+树的优点:
1.
由于
B+
树在非叶子结点上不包含真正的数据,只当做索引使用,因此在内存相同的情况下,
能够存放更多的 key
。
2.B+
树的叶子结点都是相连的,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。而且由于数据顺序 排列并且相连,所以
便于区间查找和搜索
。而B
树则需要进行每一层的递归遍历。
B树的优点:
由于
B
树的每一个节点都包含
key
和
value
,因此我们根据
key查找value时,只需要找到key
所在的位置,就能找到value,但
B+
树只有叶子结点存储数据,索引每一次查找,都必须一次一次,一直找到树的最大深度处,也就是叶子结点的深度,才能找到value
。
B+树在数据库中的应用:
在数据库的操作中,查询操作可以说是最频繁的一种操作,因此在设计数据库时,必须要考虑到查询的效率问题, 在很多数据库中,都是用到了B+
树来提高查询的效率;
在操作数据库时,我们为了提高查询效率,可以基于某张表的某个字段建立索引,就可以提高查询效率,那其实这个索引就是B+
树这种数据结构实现的。