B-tree(B树)介绍

          当查找的文件较大,且存放在磁盘等直接存取设备中时,为了减少查找过程中对磁盘的读写次数,提高查找效率,基于直接存取设备的读写操作以"页"为单位的特征。

         1972年R.Bayer和E.M.McCreight提出了一种称之为B-树的多路平衡查找树。它适合在磁盘等直接存取设备上组织动态的查找表。

一、B-树的定义

         一棵m(m≥3)阶的B-树是满足如下性质的m叉树:

(1)每个结点至少包含下列数据域:

(j,P0,K1,P1,K2,…,Ki,Pi)

  其中:

    j为关键字总数

    Ki(1≤i≤j)是关键字,关键字序列递增有序:K1 < K2 < … < Ki。

    Pi(0≤i≤j)是孩子指针。对于叶结点,每个Pi为空指针。

  注意:

①实用中为节省空间,叶结点中可省去指针域Pi,但必须在每个结点中增加一个标志域leaf,其值为真时表示叶结点,否则为内部结点。

②在每个内部结点中,假设用keys(Pi)来表示子树Pi中的所有关键字,则有:

keys(P0)< K1 < keys(P1) < K2 < … < Ki < keys(Pi)

即关键字是分界点,任一关键字Ki左边子树中的所有关键字均小于Ki,右边子树中的所有关键字均大于Ki。

(2)所有叶子是在同一层上,叶子的层数为树的高度h。

(3)每个非根结点中所包含的关键字个数j满足:

(ceil(m/2))-1<= j <= m-1。

即每个非根结点至少应有(ceil(m/2))-1 个关键字,至多有m-1个关键字。((ceil(m/2))取上限的函数)

因为每个内部结点的度数正好是关键字总数加1,故每个非根的内部结点至少有(ceil(m/2))子树,至多有m棵子树。

(4)若树非空,则根至少有1个关键字,故若根不是叶子,则它至少有2棵子树。根至多有m-1个关键字,故至多有m棵子树。

 

         如下图所示,即是一棵B树,一棵关键字为英语中辅音字母的B树,现在要从树种查找字母R(包含n[x]个关键字的内结点x,x有n[x]+1]个子女(也就是说,一个内结点x若含有n[x]个关键字,那么x将含有n[x]+1个子女)。所有的叶结点都处于相同的深度,带阴影的结点为查找字母R时要检查的结点):


总结:

(1)每个节点,至多有m个节点;

(2)除根节点外,每个节点至少有(ceil(m/2))个节点;

(3)根节点,至少有两个子树(除非该B树只包含一个根节点);

(4)所有叶子是在同一层上;B树的叶子节点可以看作外部节点,不包含任何信息;

(5)含有j个子树的非叶子节点恰好有j-1个关键字,关键字按递增的顺序排列;

针对上面第5点,再阐述下:B树中每一个结点能包含的关键字(如之前上面的D H和Q T X)数有一个上界和下界。这个下界可以用一个称作B树的最小度数(算法导论中文版上译作度数,最小度数即内节点中节点最小孩子数目)t(t >= 2)表示。

(1)   每个非根的结点必须至少含有t-1个关键字。每个非根的内结点至少有t个子女。如果树是非空的,则根结点至少包含一个关键字;

(2)   每个结点可包含之多2t-1个关键字。所以一个内结点至多可有2t个子女。如果一个结点恰好有2t-1个关键字,我们就说这个结点是满的(而稍后介绍的B*树作为B树的一种常用变形,B*树中要求每个内结点至少为2/3满,而不是像这里的B树所要求的至少半满);

(3)   当关键字数t=2(t=2的意思是,tmin=2,t可以>=2)时的B树是最简单的(有很多人会因此误认为B树就是二叉查找树,但二叉查找树就是二叉查找树,B树就是B树,B树的真正最准确的定义为:一棵含有t(t>=2)个关键字的平衡多路查找树)。每个内结点可能因此而含有2个、3个或4个子女,亦即一棵2-3-4树,然而在实际中,通常采用大得多的t值。

B树中的每个结点根据实际情况可以包含大量的关键字信息和分支(当然是不能超过磁盘块的大小,根据磁盘驱动(disk drives)的不同,一般块的大小在1k~4k左右);这样树的深度降低了,这就意味着查找一个元素只要很少结点从外存磁盘中读入内存,很快访问到要查找的数据。

 

二、性能分析 

设B-树包含N个关键字,因此有N+1个叶子结点,叶子都在第I层。因为根至少有两个孩子,因此第二层至少有两个结点。除根和叶子外,其它结点至少有(ceil(m/2))个孩子,因此在第三层至少有2*(ceil(m/2))个结点,在第四层至少有2*((ceil(m/2))^2)个结点,...,在第I层至少有2*((ceil(m/2))^(I-2))个结点,于是有:

N+1 ≥2*((ceil(m/2))^(I-2))

考虑第I层的结点个数为N+1,那么2*((ceil(m/2))^(I-2))≤ N+1,也就是I层的最少结点数刚好达到N+1个   

即:

  所以,当B-树包含N个关键关键字时,B-树的最大高度为I-1(因为计算B-树高度时,叶结点所在层不计算在内)

  即

  这个公式保证了B-树的查找效率是相当高的。

三、时间复杂度分析 


         其中,M为设定的非叶子结点最多子树个数,N为关键字总数;所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;

由于M/2的限制,在插入结点时,如果结点已满,需要将结点分裂为两个各占M/2的结点;删除结点时,需将两个不足M/2的兄弟结点合并。


转载于:https://www.cnblogs.com/youngerchina/archive/2012/01/16/5624630.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值