数据结构之B树、B-树、B+树、B*树

概述

B/B+/B*树是为了磁盘或其它存储设备而设计的一种平衡多路查找树(相对于二叉,B树每个内节点有多个分支),与红黑树相比,在相同的的节点的情况下,一颗B树的高度远远小于红黑树的高度.B树上操作的时间通常由存取磁盘的时间和CPU计算时间这两部分构成,而CPU的速度非常快,所以B树的操作效率取决于访问磁盘的次数,关键字总数相同的情况下B树的高度越小,磁盘I/O所花的时间越少.

B树

B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,,B-树就是指的B树。

B树的性质

  • 定义任意非叶子结点最多只有M个儿子;且M>2;
  • 根结点的儿子数为[2, M];
  • 除根结点以外的非叶子结点的儿子数为[M/2, M];
  • 每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
  • 非叶子结点的关键字个数=指向儿子的指针个数-1;
  • 非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
  • 非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键- - 字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
  • 所有叶子结点位于同一层;
    在这里插入图片描述

B树的特点

1.关键字集合分布在整颗树中;

2.任何一个关键字出现且只出现在一个结点中;

3.搜索有可能在非叶子结点结束,因此查找不稳定;

4.其搜索性能等价于在关键字全集内做一次二分查找,时间复杂度为O(logn)

5.自动层次控制,由于M/2的限制,在插入结点时,如果结点已满,需要将结点分裂为两个各占

M/2的结点;删除结点时,需将两个不足M/2的兄弟结点合并;

B+树

B+树是B-树的变体,也是一种多路搜索树。

  • 其定义基本与B树同,除了:

  • 非叶子结点的子树指针与关键字个数相同(实现方法有多种形式,有的是和关键字个数相同,有的是与B树一致,即指针数=关键字数+1);

  • 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(实现方法有多种形式,有的是和B树一致是开区间,有的是(K[i], K[i+1]]);

  • 为所有叶子结点增加一个链指针;

  • 所有关键字都在叶子结点出现;

下图是B+树的一种形式:

在这里插入图片描述

B+ 树的特点

1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字是有序的;

2.不可能在非叶子结点命中;

3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;

4.更适合文件索引系统(B+树主要用在文件系统以及数据库做索引);

B+树比B树的优势:

  1. B+树的内部结点(即非叶子节点)并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
  2. B+树只能在叶子节点命中,因此查询效率稳定。
  3. B树元素遍历的效率低下。B+树只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树只能通过中序遍历来实现。

B* 树

B*树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针
如下图所示:

在这里插入图片描述
B*树定义了非叶子结点至少有(2/3)*m个关键字(B树是m/2)

B+树的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针。

B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针。

所以,B*树分配新结点的概率比B+树要低,空间使用率更高;

参考链接:
https://blog.csdn.net/u013411246/article/details/81088914
https://blog.csdn.net/whoamiyang/article/details/51926985

发布了15 篇原创文章 · 获赞 4 · 访问量 1074

猜你喜欢

转载自blog.csdn.net/a15723207292/article/details/98053597