由于查找效率低的问题,我们引入了二叉查找树,但是在一些情况下,二叉查找树的深度过深,搜索算法向下搜索时就会遍历很多节点,减低查询的效率,基于这个思路,如果将二叉改为多叉的话,每个节点存储更多的IO信息,可以提高查询效率。

1.B树:可以理解为平衡多路查找树

一颗最小度为t的B树是满足如下四个条件的平衡多叉树:

      每个节点最多包含(2t-1)个关键字;除根节点外的每个节点至少有(t-1)个关键字,跟节点至少有一个关键字;

      一个节点u中的关键字按非降序排列:u.key1 ≤ u.key2 ≤ ...... ≤ u.keyn

      每个节点的关键字对其子树进行范围分割

      所有叶子节点具有相同的深度,即树的高度h。这表明B树是平衡的。平衡性其实是B树的名字来源,B正是单词Balanced

一颗标准的B树

      B树系列(B树)

树的高度:对于一个包含n个关键字的,最小度数t≥2的B树T,其高度满足B树系列(B树)

生成B树(t=2)0的例子:6 10 4 14 5 11 15 3 2 12 1 7 8 8

1)加入前三个元素时,会直接存在一个节点里面,在放入14时,由于B树的规则,每个节点不能多于2t-1个元素,因此需要进行转化

B树系列(B树)

   2)加入5和11的时候不会改变树的结构

      B树系列(B树)   

3)添加15节点的时候,由于右子树中节点元素超过三,因此进行修改树

      B树系列(B树)

4)插入3节点,而后插入2节点

      B树系列(B树)

5)插入12节点

      B树系列(B树)

6)插入1节点

      B树系列(B树)

7)插入7节点

      B树系列(B树)

8)插入8节点

B树系列(B树)

9)插入8节点

      B树系列(B树)

B树的生成可以近似为向上扩展,当叶子节点中的元素个数超过预期值后将节点转移给他的父节点,由父节点层层向上传递最后生成一颗新树,B树也是通过这种方法保证所有叶子节点在同一深度上

相关文章: