数据结构复习:B树/B+树
Posted billyrun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构复习:B树/B+树相关的知识,希望对你有一定的参考价值。
B树(B-树)
引用场合:文件系统
B 树又叫平衡多路查找树。一棵m阶的B 树 (m叉树)的特性如下:
-
B树中所有节点的孩子节点数中的最大值称为B树的阶,记为M(重点)
-
树中的每个节点至多有M棵子树 ---即:如果定了M,则这个B树中任何节点的子节点数量都不能超过M
-
若根节点不是终端节点,则至少有两棵子树
-
除根节点和叶节点外,所有点至少有m/2棵子树(上溢)
-
所有的叶子结点都位于同一层。
B+树
B+树的特征:
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
B树与B+树的比较
B+树的优势:
1.单一节点存储更多的元素,使得查询的IO次数更少。
2.所有查询都要查找到叶子节点,查询性能稳定。
3.所有叶子节点形成有序链表,便于范围查询。
而B+树中间节点没有Data数据,所以同样大小的磁盘页可以容纳更多的节点元素。所以数据量相同的情况下,B+树比B树更加“矮胖“,因此使用的IO查询次数更少。
由于B树的查找并不稳定(最好的情况是查询根节点,最坏查询叶子节点)。而B树每一次查找都是稳定的。
比起B树,B+树 ①IO次数更少 ②查询性能很稳定 ③范围查询更简便
B+树的优点在于:
1.由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。
数据存放的更加紧密,具有更好的空间局部性。
因此访问叶子节点上关联的数据也具有更好的缓存命中率。
2.B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。
而且由于数据顺序排列并且相连,所以便于区间查找和搜索。
而B树则需要进行每一层的递归遍历,相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
但是B树也有优点,其优点在于:
由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速
与红黑树相比
https://www.jianshu.com/p/71700a464e97
https://www.jianshu.com/p/a858bb15cbf0
以上是关于数据结构复习:B树/B+树的主要内容,如果未能解决你的问题,请参考以下文章