B树到底是什么?

938 阅读3分钟

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

B树又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一般从查找效率考虑,通常要求m>=3.

20210808193047.png

概念

一棵m阶b树或为空树,或为满足如下特质的n叉树:

  • 树中每个结点至多有m棵子树,即至多含有m-1个关键字

  • 若根节点不是终端结点,则至少有两棵树

  • 除根结点外的所有非叶节点至少有【m/2】(向上取整)棵子树,即至少含有【m/2】(向上取整)-1个关键字

  • 所有非叶节点的结构如下:其中Ki(i=1,2,。。。,n)为结点的关键字,Pi(i=1,2,。。。,n)为指向子树根结点的指针

nP0K1P1K2P2KnPn
  • 所有的叶节点都出现在同一层次上,并且不带信息(可以视为外部结点或类似于折半查找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)

  • B树是所有结点的平衡因子均等于0的多路平衡查找树。

B树的高度

B树的高度不包括最后的不带任何信息的叶结点所在的那一层。

若n>=1,则对任意一棵包含n个关键字、高度为h、阶数为m的B树:

因为B树中每个结点最多有m棵子树,m-1个关键字,所以在一棵高度为h的m阶B树中关键字的个数应满足n<=(m-1)(1+m+m^2 +…+ m^h-1 )=m^h-1 ,因此有h>=logm(n+1)

若让每个结点中的关键字个数达到最少,则容纳同样多关键字的B树的高度达到最大。由B树的定义:第一层至少有1个节点;第二层至少有2个结点;除根结点外的每个非终端节点至少有【m/2】棵子树,则第三层至少有2【m/2】个结点。。。第h+1层至少有2(【m/2】^(h-1)),

注意到第h+1层是不包含任何信息的叶结点。对于关键字个数为n的B树,叶结点即查找不成功的结点为n+1,因此有n+1>2([m/2])^(h-1),即h<log[m/2] ( (n+1)/2)+1

查找

在B树上查找于二叉排序树很相似,只是每个结点都是多个关键字的有序表,在每个结点上所做的不是两路分支决定,而是根据该节点的子树所做的多路分支决定。

B树的查找包含两个基本操作:

  1. 在B树中找结点

  2. 在结点内找关键字。

由于B树常存储在磁盘上,因此前一个查找操作是在磁盘上进行的,而后一个查找操作是在内存中继续的。即在找到目标结点后,先将结点信息读入内存,然后在结点内采用顺序查找法,或折半查找法。

在B树上查找到某个结点后,先在有序表中进行查找,若找到则查找成功,否则按照对应的指针信息到所指的子树中去查找。查找到叶结点(对应指针为空指针)时,则说明树中没有对应的关键字,查找失败。