一、B 树

1、B 树的概念

  • B 树,即多路平衡查找树
  • B 树中所有节点的孩子个数的最大值称为 B 树的阶。

2、B 树的定义

  • 一棵 m 阶的 B 树或为空树,或者满足下列性质:
    1)树中每个节点至多有 m 棵子树
    2)分支节点至少有两棵子树
    3)根节点外的分支节点至少有 ⌈m/2⌉ 棵子树
    4)所有非叶子节点的结构如下:
    数据结构学习笔记之B树与B+树
    其中,Ki 为节点关键字,且以递增顺序排列,Pi 是指向子树根节点的指针,且 Pi-1 所指子树的所有节点的关键字均小于 Ki,而 Pi 所指的子树中的关键字都大于 Ki
    5)所有叶节点在同一层中,并且不带信息
  • 一棵四阶 B 树形状如下:
    数据结构学习笔记之B树与B+树

3、重要结论

  • 根据 B 树的性质可以得出如下重要结论:
    1)B 树是所有节点的平衡因子等于 0 的多路平衡查找树
    2)节点的孩子个数为结点关键字数加一
    3)根节点无关键字相当于没有子树,也即是空树;若根节点有关键字,则子树必大于两棵
    4)根节点外的分支节点至少有 ⌈m/2⌉-1 个关键字,即有⌈m/2⌉ 棵子树
    5)节点中关键字自左向右递增,关键字两侧均有指向子树的指针,左边指针所指子树的所有关键字均小于该关键字,右边指针所指的子树的关键字均大于该关键字
    6)所有叶节点在最深一层,代表查找失败的位置

4、B 树的高度

  • B树中的大部分操作所需的磁盘存取次数与B树的高度成正比
  • 对于任何一棵有 n >=1个关键字、高度为 h、阶数为 m 的B树:
    1)当每个节点最多有 m 棵子树时,n<= (m-1)(1+m+m2+ … + mh-1)=mh - 1,故 h>=logm(n+1)。
    2)当每个节点关键字数达到最少,则容纳同样多的关键字的 B 树的高度达到最大,此时 h<=log⌈m/2⌉((n+1)/2)+1。
  • 一棵 3 阶 B 树共 8 个关键字,则 2<=h<=3.17.

5、B 树的查找

  • 对一棵 B 树进行查找可分为两步:第一步确定节点,第二步在节点内确定关键字
  • 由于 B 树通常存储在磁盘上,故而第一步操作是在磁盘上进行,第二步操作是在内存中进行。
  • 经过第一步确定节点后,在节点内的有序表进行比较,若查找成功,则按照对应的指针信息到所指子树上去查找;在子树上也是这两个步骤,直到找到对应关键字或到叶节点。若递归到了叶节点也没有找到对应的关键字,则说明关键字在 B 树中并不存在。

6、B 树的插入

  • B 输入的插入过程分解为定位和插入两步。

6.1、定位

  • 利用 B 树查找算法,找到插入关键字的最低层中的某个非叶节点,插入位置必须是最低层的某个非叶节点

6.2、插入

  • 每个非失败节点的关键字个数满足(⌈m/2⌉+1, m-1),插入一个关键字后,结点关键字数小于 m,则可以直接插入;若插入后节点关键字数目大于 m-1,则必须对节点进行分裂。
  • 分裂就是:取一个新节点,在插入关键字的后的原节点,从中间位置( ⌈m/2⌉ )将其中的关键字分为两部分,左部分的关键字放在原节点,右部分的关键字放在新节点,中间位置(⌈m/2⌉)的关键字插入原节点的父节点,若父节点进行插入后也导致关键字数目超过上限,则继续进行分裂,直到根节点为止,此时 B 树高度增 1
    数据结构学习笔记之B树与B+树

相关文章:

  • 2021-09-21
  • 2021-09-23
  • 2021-06-02
  • 2021-07-25
  • 2021-04-28
  • 2021-08-18
猜你喜欢
  • 2021-09-15
  • 2021-08-28
  • 2021-06-17
  • 2021-07-12
  • 2021-06-24
  • 2021-05-09
相关资源
相似解决方案