Day16

多路搜索树
以k层为间隔,将二叉搜索树的各结点及其孩子(和孙子)合并为含有2(k)-1个关键码,2(k)个分支的“大结点”,得到2(k)路搜索树,统称多路搜索树。
四路搜索树

m阶B-树:m路平衡搜索树。所有外部节点深度相等,所有内部节点都有不超过m-1个关键码,以及用以指示其对应分支的不超过m个引用。
即,存有n<=m-1个关键码的内部节点同时配有n+1<=m个引用,除根以外的所有内部结点都应满足 n+1 >= ceiling(m/2),在非空的B-树中,根节点应该满足 n+1 >= 2。
由于各结点的分支数在ceiling(m/2)到m之间,所以m阶B-树又称为(ceiling(m/2), m)-树。
在计算B-树高度的时候需要计入其底部的外部结点。
但通常为了表示方便会在图中省略外部结点。
B-树最紧凑表示方式

查找:
与二叉搜索树过程基本相似。以根节点作为当前结点逐层深入,如果在当前节点所包含的一组关键码中能找到目标关键码,则成功返回,如果当前结点的关键码中不存在目标,则必可在当前节点中确定某一个引用,并通过该引用转至逻辑上处于下一层的另一节点,如果这个结点不是外部结点,则将其载入内存,并更新为当前结点,重复上述过程。

对于高度为h的B-树,其查找过程中对外存的访问不超过O(h-1)次。
对于一共有N个关键码的m阶B-树的高度h,必有:
这里写图片描述

对有N个关键码的m阶B-树,查找耗时不超过O(log(m)N).

插入:
与二叉搜索树过程相似,不过,在最后的叶子结点上插入后,如果该叶子结点内关键码个数依然小于m-1,才为插入成功,否则称该结点发生了一次上溢。
处理上溢:
一般上溢的结点恰好有m个关键码,所以对于s = floor(m/2),以关键码ks为界限恰好能分成等长的两部分,于是可让关键码ks升入上一层,归入其父结点的适当位置,并分别以刚才分开的两个结点作为其左右孩子,这一过程也称作节点分裂。
这个过程中分为三种情况:
1.如果上溢结点的父结点不为空,且该父结点未饱和,则将ks升到父节点中后,修复成功,过程结束;
2.如果上溢结点的父结点不为空,但该父结点已经饱和,则不断重复这一调整过程,直至根节点。
3.如果上溢传递到了根节点,根节点也饱和了,则将k’s升为新的根节点,树高度+1.

删除:
与二叉搜索树删除过程类似,先搜索,如果找到目标则将目标与其右子树中最小的那个叶节点互换,然后删除。如果删除目标后其所在的叶结点的关键码个数不小于ceiling(m/2) - 1,则称删除成功,否则成为发生下溢。
处理下溢:
在刚发生下溢的m阶B-树中,下溢结点V的关键码个数肯定为ceiling(m/2) - 2,且包含ceiling(m/2) -1个分支,同样分为3种情况处理。
1. 如果V的左兄弟L存在,且L至少包含ceiling(m/2)个关键码,则取L中最大的关键码x,以及V和L的父结点P的关键码y,将x升为父结点P的关键码,而将y降为V的关键码。
2. 如果V的右兄弟R存在,且R至少包含ceiling(m/2)个关键码,则取R中最小的关键码x,以及V和R的父结点P的关键码y,将x升为父结点P的关键码,而将y降为V的关键码。
3. 如果V的左右兄弟都不存在(这种情况下不可能同时不存在,所以只考虑后一种情况),或者左右兄弟的关键码个数也恰好为ceiling(m/2)-1,则假设V的左兄弟L(右兄弟R)存在,取V和L(R)的父结点P的关键码y,将y从父结点取出,作为连接V和L(R)的关键码,形成一个新的结点,这一过程也成为结点的合并。
此时合并后的新节点的关键码个数为
ceiling(m/2)-1+1+ceiling(m/2)-2 = 2*ceiling(m/2)-2 <= m-1
所以此时也不会发生上溢。
如果处理完V,其父结点由于删除了y也发生了下溢,则不断重复上诉步骤直到没有结点下溢,或下溢传递到了根节点,如果下溢传递到了根节点,且根节点中没有关键码时,可直接将根节点删除,以其子结点作为新的根节点。
整个过程中最多需要做O(log(m)N)次合并操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值