B+ 数

B +树可以看作是乙树的一种变形,在实现文件索引结构方面比乙树使用得更普遍。

1.B +树的定义:一颗米阶B +树是乙树的特殊情形,它与乙树的不同之处在于:

(1)所有关键码都存放在叶子结点中,上层的非叶子结点的关键码是其中树中最小(或最大)关键码的重写。

(2)叶结点包含了全部关键码即指向相应数据存放地址的指针,且叶结点本身按关键码从小到大顺序链接。

关于每个非叶结点的结构有两种处理方式。如果安下层结点“最小关键码复写”原则,则树中每个非叶结点中有米颗子树必有M-1个关键码,

关键码KI(1 <= I <M)是指针裨所指子树中最小的关键码。如果按下层结点“最大关键码复写”原则,则每个非叶结点中有米颗子树必有米个关键码。

为了讨论方便采用“最大关键码复写”原则定义B + S树。

一颗米阶B +树的结构定义如下:

(1)每个结点最多有米颗子树(子结点);

(2)根结点最少有两个子树,除根结点外,其他极点至少有[M / 2]个子树;

(3)所有叶结点在同一层,按从小到大的顺序存放全部关键码,各个叶结点顺序链接;

扫描二维码关注公众号,回复: 2677154 查看本文章

(4)有Ñ个子树的结点有Ñ个关键码;

(5)所有非叶结点可以看成是叶结点索引,结点中关键码的Ki与指向子树的指针裨构成对子树(即下一层索引块)的索引项(KI,PI) ,奇是子树中最大的关键码。

如图所有非叶结点中子树棵树2 <= N <= 4,其所有的关键码都出现在叶结点中,且在叶结点中关键码有序地排序。上面各层非叶结点中的关键码都是其子树上最大关键码的副本。由此可知,B +树的构造是自下向上的,米限定了结点的大小,从下向上地把每个结点的最大关键码复写到上一层结点中。

按“最大关键码复写”原则组织一颗4阶B +树

叶结点中存放的是对实际数据记录的索引,每个索引项(KI,PI)给出数据记录的关键码及实际存储地址。

通常B +树中有两个头指针:一个指向B + SH树的根结点,另一个指向关键码最小的叶结点因此,可以对B +树进行两种搜索运算:一种是循环叶结点自己拉起的链表顺序搜索,另一种是从根结点开始,进行自顶向下,直到叶结点的随机搜索。

在B +树上进行随机搜索,插入和删除的过程基本上和乙树类似。只是在搜索过程中,如果非叶结点上的关键码等于给定值,搜索并不停止,而是继续沿右指针向下,一直查到叶结点上的关键码。因此,在B +树中,不论搜索成功与否,每次搜索都是走了一条从根到叶结点的路径。

参考文献:殷人昆数据结构:用面向对象方法与C ++语言描述(第二版)

猜你喜欢

转载自blog.csdn.net/zzb2019/article/details/81562897