数据结构与算法:B-树和B+树_第1页
数据结构与算法:B-树和B+树_第2页
数据结构与算法:B-树和B+树_第3页
数据结构与算法:B-树和B+树_第4页
数据结构与算法:B-树和B+树_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.5B-树和B+树1、B-树2B+树9.5.1B-树

一B-树的定义B-树是一种平衡的多路查找树。一棵m阶的B-树,或为空树,或为满足下列特性的m叉树:

1.树中每个结点至多有m棵子树,m-1个关键字;

2.若根结点不是叶子结点,则至少有两棵子树;

3.除根之外的所有非终端结点至少有棵子树,至少有-1个关键字;4.所有的非终端结点中包含下列信息数据:

(n,A0,K1,A1,K2,A2,…,Kn,An)其中:Ki(i=1,…,n)为关键字,且Ki<Ki+1(i=1,…,n-1);

Ai(i=1,…,n)为指向子树根结点的指针,且指针Ai-1所指子树中所有结点的关键字均小于Ki(i=1,…,n),Ai所指子树中所有结点的关键字均大于Ki,n为关键字的个数(或n+1为子树个数)。一、B-树的定义9.5.1B-树

5.所有的叶子结点都出现在同一层次上,并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。一、B-树的定义9.5.1B-树

二、图形表示图1 一棵4阶的B-树tabcfegdh135111243781181271391993475364FFFFFFFFFFFF结点中关键字个数为1<=n<=3

子树数量范围为2<=k<=49.5.1B-树

从根结点出发,沿指针搜索结点和在结点内进行顺序(或折半)查找两个过程交叉进行。三、查找

若查找成功,则返回指向被查关键字所在结点的指针和关键字在结点中的位置;若查找不成功,则返回插入位置。9.5.1B-树

#define m 3 //B-树的阶,暂设为3typedefstructBTNode{ int keynum//结点中关键字个数,即结点的大小

structBTNode*parent;//指向双亲结点

KeyType key[m+1];//关键字向量,0号单元未用

structBTNode*ptr[m+1]; //子树指针向量//记录指针向量,0号单元未用

}BTNode,*BTree;B-树结构体B-树查询结构体typedefstruct{ BTNode *pt; //指向找到的结点

int i; //1..m,在结点中的关键字序号

int tag; //1:查找成功,0:查找失败

}Result; //B-树的查找结果类型三、B-树的查找算法代码9.5.1B-树

查找分析从上述算法可见,在B-树上进行查找包含两种基本操作:a.在B-树中找结点(操作在磁盘上进行);b.在结点中找关键字(操作在内存中进行)。显然,在磁盘上进行一次查找比在内存中进行一次查找耗费时间多得多,因此,在磁盘上进行查找的次数、即待查关键字所在结点在B-树上的层次数,是决定B-树查找效率的首要因素。

9.5.1B-树

四、B-树的查找

根据B-树的定义,第一层至少有1个结点;第二层至少有2个结点;棵子树,则第三层至少有2()个结点;……;依次类推,第l+1层至少有)l-1由于除根之外的每个非终端结点至少有2(个结点。而l+1层的结点为叶子结点。若m阶B-树中具有N个关键字,则叶子结点即查找不成功的结点为N+1,由此有:推得:3.查找分析9.5.1B-树

四、B-树的查找查找分析这就是说,在含有N个关键字的B-树上进行查找时,从根结点到关键字所在结点的路径上涉及的结点数不超过9.5.1B-树

四、B-树的查找四、B-树的插入(重点和考点)1.算法思想:由于B-树结点中的关键字个数必须

。因此,每次插入一个关键字不是在树中添加一个叶子结点,而是首先在最低层的某个非终端结点中添加一个关键字,若该结点的关键字个数不超过m-1,则插入完成,否则要产生结点的“分裂”。9.5.1B-树

五、B-树的插入2一般情况下,结点可如下实现“分裂”:假设p结点中已有m-1个关键字,当插入一个关键字之后,结点中含有信息为:m,A0,(K1,A1),…,(Km,Am)且其中Ki<Ki+1,1≤i<m,此时可将p结点分裂为p和p’两个结点,其中p结点中含有信息为:

9.5.1B-树

五、B-树的插入p’结点中含有信息:而关键字和其右指针一起上升插入到p的双亲结点中,该右指针指向p’。9.5.1B-树

3.例子例如,图2所示为3阶B-树(图中略去F结点,即叶子结点),假设需一次插入关键字30,26,85和7。(a) bta45b24c312d37f50h100g6170e5390图2一棵2-3树五、B-树的插入bta45b24c312df50h100g6170e53903037(b)五、B-树的插入bta45b24c312df50h100g6170e5390263037(c)五、B-树的插入bta45b2430c312df50h100g6170e53903726d’(d)bta45b2430c312df50h100g617085e53903726d’(e)五、B-树的插入(f)bta45b2430c312df50h100g61e5370903726d’85g’五、B-树的插入(g)bta4570b2430c312df50h100g61e533726d’85g’e’90五、B-树的插入(h)bta4570b72430c3df50h100g61e533726d’85g’e’9012c’五、B-树的插入bta244570b7c3df50h100g61e5326d’85g’e’9012c’30b’37(i)五、B-树的插入(j)bta70b7c3df50h100g61e5326d’85g’e’9012c’30b’ma’452437(a)一棵2-3树;(b)插入30之后;(c)、(d)插入26之后;

(e)~(g) 插入85之后;(h)~(j)插入7之后;图2 在B-树中进行插入(省略叶子结点)五、B-树的插入

五、B-树的删除1.算法思想:在B-树中删除一个关键字,则首先应找到该关键字所在结点,并从中删除之。(1)若所删关键字为非终端结点中的Ki,则以指针Ai所指子树中的最小关键字Y替代Ki,然后在相应的结点中删去Y。(2)若所删关键字在最下层非终端结点中。有下列3种情况:a.被删关键字所在结点中的关键字数目不小于,则只需从该结点中删去该关键字Ki和相应指针Ai,树的其他部分不变。9.5.1B-树

b.被删关键字所在结点中的关键字数目等于-1,而与该结点相邻的右兄弟(或左兄弟)结点中的关键字数目大于-1,则需将其右兄弟结点中的最小(或左兄弟最大)的关键字上移至双亲结点中,而将双亲结点中小于(或大于)且紧靠该上移关键字的关键字下移至被删关键字所在结点中。

六、B-树的删除c.被删关键字所在结点和其相邻的兄弟结点中的关键字数目均等于-1。假设该结点有右兄弟,且其右兄弟结点地址由双亲结点中的指针Ai所指,则在删去关键字之后,它所在结点中剩余的关键字和指针,加上双亲结点中的关键字Ki一起,合并到Ai所指兄弟结点中(若没有右兄弟,则合并至左兄弟结点中)。如果因此使双亲结点中的关键字数目小于

-1,则一次类推作相应处理。

六、B-树的删除bta45b24c312

d37f50h100g6170e53902.例子

六、B-树的删除bta45b24c3d37f50h100g6170e5390(a)

六、B-树的删除bt45ab24c3d37f53h100g70e6190(b)

六、B-树的删除bt45ab24c3d37

h100g6170e90(c)

六、B-树的删除ec324h100g61704590bt(d)图3 在B-树中删除关键字的情形

六、B-树的删除

说明:(1)从图2(a)所示B-树中删去关键字12,删除后的B-树如图3(a)所示。(2)从图3(a)中删去50,需将其右兄弟结点中的61上移至*e结点中,而将*e结点中的53移至*f,从而使*f和*g中关键字数目均不小于-1,而双亲结点中的关键字数目不变,如图3(b)所示。

六、B-树的删除

说明:(3)从图3(b)所示B-树中删去53,则应删去*f结点,并将*f中的剩余信息(指针“空”)和双亲*e结点中的61一起合并到右兄弟结点*g中,删除后的树如图3(c)所示。(4)在图3(c)的B-树中删去关键字37之后,双亲b结点中剩余信息(“指针c”)应和其双亲*a结点中关键字45一起合并至右兄弟结点*e中,删除后的B-树如图3(d)所示。

六、B-树的删除9.5.2B+树1、定义

B+树是应文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树的差异在于:有n棵子树的结点中含有n个关键字。3.所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最小)关键字。2.所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。9.5.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论