数据结构复习: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+树

应用场合:数据库索引
 

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,因此经常访问的元素可能离根节点更近,因此访问也更迅速

 

与红黑树相比

B树、B+树更加矮胖,减少IO次数,适合文件系统
B树、B+树的插入删除不需要旋转
 
引用
https://blog.csdn.net/qq_25940921/article/details/82224418
https://www.jianshu.com/p/71700a464e97
https://www.jianshu.com/p/a858bb15cbf0

以上是关于数据结构复习:B树/B+树的主要内容,如果未能解决你的问题,请参考以下文章

复习系列之数据库:MySQL为什么采用B+树作为索引结构?

16 树的子结构(这题多复习)

B-树 B+树复习总结

数据 结构客观题复习题集

java十年技术栈[总结复习用]

面试常规算法复习(最小生成树)