【数据结构与算法】多路查找树的介绍(B树、B+树、B*树)

1. 二叉树的缺点

如下的二叉树:

二叉树二叉树需要加载到内存的,如果二叉树的节点很多, 会有如下问题:

  1. 在构建二叉树时,将二叉树的数据保存在数据库或文件中,需要进行多次i/o操作
  2. 会造成二叉树的高度很大,降低操作速度

2. 多叉树的介绍

如果每个节点可以有多个value,且每个节点可以有多个子节点,那就是多叉树(multiway tree)。多叉树能减少树的高度,多叉树有B树、B+树等

3. B树的介绍

B即Balanced,B树也叫B-tree树。B树可以减少i/o读写次数来提升效率,如下所示:

B树

文件系统及数据库系统的设计者利用磁盘预读原理,将一个磁盘节点的大小设为等于一个页缓存(页缓存得大小通常为4k),这样每个磁盘节点只需要一次I/O就可以完全载入。将树的度设置为1024(即一个节点最多能有1024个子节点),在600亿个元素中最多只需要4次I/O操作就可以读取到想要的元素。所以B树(B+树)广泛应用于文件存储系统及数据库系统中做为索引

B树索引
B树说明

  • B树的阶:节点的最多子节点个数。比如2-3树的阶是3,2-3-4树的阶是4
  • 叶子节点和非叶子节点都存放数据
  • B-树的搜索,从根结点开始,对节点内的数据进行查找,如果命中则结束,否则进入查询关键字所属范围的子节点;重复直到所对应的子节点为空,或已经是叶子节点

4. 2-3树的介绍

2-3树是最简单的B树结构, 具有如下特点:

  • 因为B树的所有叶子节点都在同一层,所以2-3树的所有叶子节点也都在同一层
  • 有两个子节点的节点叫二节点。二节点要么没有子节点,要么有两个子节点
  • 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点
  • 2-3树就是由二节点和三节点构成的树

2-3树的构建思路

当添加一个节点时,不能满足上面2-3树特点,就需要进行补或拆。先向上层补;如果上层满,则拆本层;拆后如果所有叶子节点不再同一层,则对层数低的树进行拆分。最后仍需满足上面3个条件

对于三节点的子树的值大小仍然遵守二叉排序树BST的规则。即左边的值最小,右边的值最大

例子:将数列{16, 24, 12, 32, 14, 26, 34, 10, 8, 28, 38, 20}构建成2-3树,并保证数据插入的大小顺序。步骤如下:

步骤1:
步骤1
步骤2:

步骤2步骤3:
步骤3

步骤4:
步骤4
步骤5:
步骤5
除了2-3树,还有2-3-4树等,概念和2-3树类似,也是一种B树

5. B+树

B+树是B树的变体。如下所示:

B+树
B+树说明

  • 所有数据都只能出现在叶子节点的有序链表中(也叫稠密索引),相当于是储存数据的数据层;非叶子节点相当于是叶子节点的索引(稀疏索引)
  • 不可能在非叶子节点命中数据

6. B*树

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

B*树

B*树说明

  • B*树定义了非叶子节点数据个数至少为(2/3)M,即块的最低使用率为2/3,而B+树的块的最低使用率为B树的1/2
  • B*树分配新节点的概率比B+树要低,空间使用率更高

猜你喜欢

转载自blog.csdn.net/yy8623977/article/details/126938644