深圳大学-数据结构-2017-B-树演示文档_第1页
深圳大学-数据结构-2017-B-树演示文档_第2页
深圳大学-数据结构-2017-B-树演示文档_第3页
深圳大学-数据结构-2017-B-树演示文档_第4页
深圳大学-数据结构-2017-B-树演示文档_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

.,B-树,前面讨论的查找算法都是在内存中进行的,它们适用于较小的文件,而对较大的、存放在外存储器上的文件就不合适了。 1972年R.Bayer和E.M.McCreight提出了一种称为B-树的多路平衡查找树,它适合在磁盘等直接存取设备上组织动态的查找表。,一. B-树的定义,B-树是一种平衡的多路查找树,在文件系统中,成为索引文件的一种有效结构,得到广泛应用。,.,一棵m阶(m3)B-树,或为空树,或为满足下列特性的m叉树:(1)树中每个结点至多有m棵子树;(2)若根结点不是叶子结点,至少有两棵子树;(3)所有的非终端结点中包含下列信息 (n,p0,k1,p1,k2,p2,kn,pn)其中:ki(1in)为关键字,且kiki+1(1in); pj(0jn)为指向子树根结点的指针,且pj(0jn)所指子树中所有结点的关键字均小于kj+1,pn所指子树中所有结点的关键字均大于kn,n(m/2-1nm-1)为关键字的个数(n+1为子树个数)。,B-树,.,(4)除根结点之外所有非终端结点至少有m/2棵子树,也即每个非根结点至少应有m/2-1个关键字;(5)所有的叶子结点都出现在同一层上,并且不带信息(可看作外部结点或查找失败的结点,这些结点不存在,指向这些结点的指针为空)。,B-树,.,2 50 80,root,2 20 40,2 55 70,例一棵3阶的B-树,B-树,.,B-树的基本操作,B-树的查找运算,2 50 80,root,2 20 40,2 55 70,.,B-树的插入运算,在B-树中插入关键字k的方法:首先在树中查找k,找到,直接返回(假设不处理相同关键字的插入);否则查找操作必失败于某个叶子结点上,可以确定关键字k的插入位置,将k插入到所指叶结点位置上。若该叶结点原来非满(结点中原有关键字总数小于m-1),则插入k并不会破坏B-树的性质,故插入操作完成,例如,在下图所示5阶B-树的某结点(假设为p结点)中插入新的关键字150时的结果。,B-树的基本操作,.,2 100 190,3 100 150 190,在关键字个数不满的结点中插入关键字,若p所指示的叶结点原为满,则插入后破坏了B-树的性质(1),须调整使其维持B-树的性质不变。,B-树的基本操作,.,调整方法:将违反性质(1)的结点以中间位置的关键字keym/2为划分点,将该结点(即p)(m,p0,k1,p1,km,pm)分裂为两个结点左边:(m/2-1,p0,k1,km/2-1,pm/2-1)右边:(m-m/2,pm/2,km/2+1,km,pm)同时把中间关键字km/2插入到双亲结点中。于是双亲结点中指向被插入结点的指针pre改成pre、km/2、pre三部分。指针pre指向分裂后的左边结点,指针pre指向分裂后的右边结点。由于将km/2插入双亲时,双亲结点亦可能原本为满,若如此,则需对双亲做分裂操作。分裂过程的例子如图所示。,B-树的基本操作,.,2 80 220,4 90 120 140 160,p,3 80 120 220 ,2 90 100,2 140 160,pre,pre,pre,km/2,插入100以前,插入100以后,B-树的基本操作,.,例如初始时B-树为空树,通过逐个向B-树中插入新结点,可生成一棵B-树。下图说明了一棵5阶B-树的生长过程。,6 8 15 16,6 8,15,16 22,6 8 10,15,16 18 22 32,(a)插入6、8、15、16 (b)插入22 (c)插入10、18、32,6 8 10,15 20,16 18,22 32,6 8 10 12,15 20,16 18 19,22 32 40 50,6 8 10 12,15 20 40,16 18 19,22 32,50 56,(d)插入20 (e)插入12、19、40、50 (f)插入56,B-树的基本操作,.,6 8,9 15 20 40,16 18 19,22 26 32 36,50 52 55 56,10 12,6 8,9 15,16 18 19,22 26,50 52 55 56,10 12,36 38,20,32 40,(g)插入9、26、36、52、55 (h)插入38,.,B-树的基本操作,B-树的删除运算,在B-树上删除一个关键字,首先找到该关键字所在结点及其在结点中的位置。可分为两种情况:(1)被删除结点ki在最下层的非终端结点(即叶子结点的上一层),则删除ki及它右边的指针pi。 删除后若结点中关键字数目不少于m/2-1,删除完成,否则进行“合并”结点的操作。(2)若删结点ki是最下层的非终端结点以上某层的结点,根据B-树的特性可知,可以用ki右边指针pi所指子树中最小关键字y代替ki,然后在相应的结点中删除y,或用ki左边指针pi-1所指子树中最大关键字x代替ki,然后在相应的结点中删除x。,.,例 :删除图所示3阶B-树中的关键字50,可以用它右边指针所指子树中最小关键字60代替50,尔后转化为删除叶子上面一层的结点中的60,删除后得到的B-树如图所示。,.,90 115,8,40,28,150 200,85 120,50,60 80,90 115,8,40,28,150 200,85 120,60,80,3阶B-树中删除50以60代替50,.,删除B-树叶子上面一层结点中的关键字的方法,分三种情形:,1)被删关键字所在叶子上面一层结点中的关键字数目不小于m/2,则只需要从该结点中删去关键字ki和相应的指针pi,树的其它部分不变。,例:,删除60与115,.,2)被删关键字所在叶子上面一层结点中的关键字数目等于m/2-1,而与该结点相邻的右兄弟结点(或左兄弟结点)中的关键字数目大于m/2-1,则需要将其右兄弟的最小关键字(或其左兄弟的最大关键字)移至双亲结点中,而将双亲结点中小于(或大于)该上移关键字的关键字下移至被删关键字所在的结点中。例如从图中删除关键字90,结果如图所示。,.,3)被删关键字所在叶子上面一层结点中的关键字数和其相邻的兄弟结点中的关键字数目均等于m/2-1,则第(2)种情况中采用的移动方法将不奏效,此时须将被删关键字所有结点与其左或右兄弟合并。不妨设该结点有右兄弟,但其右兄弟地址由双亲结点指针pi所指,则在删除关键字之后,它所在结点中剩余的关键字和指针加上双亲结点中的关键字ki一起合并到pi所指兄弟结点中(若没有右兄弟,则合并至左兄弟结点中)。,.,例删去关键字120,则应删去120所在结点,并将双亲结点中的150与200合并成一个结点,删除后的树如图所示。如这一操作使双亲结点中的关键字数目小于m/2-1,则依同样方法进行调整,最坏的情况下,合并操作会向上传播至根,当根中只有一个关键字时,合并操作将会使根结点及其两个孩子合并成一个新的根,从而使整棵树的高度减少一层。,.,例删除关键字8关键字所在结点无左兄弟,只检查其右兄弟,然而右兄弟关键字数目等于m/2-1,此时应检查其双亲结点关

温馨提示

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

评论

0/150

提交评论