当前课程知识点:数据结构(下) > 第八章 高级搜索树(下) > (b4)B-树: 插入 > 08B4-2 分裂
确切的说 如此发生上溢的节点应该恰好拥有m+1个分支
相应地 也恰好有m个关键码
我们不妨 将其计作k0一直到km-1
对上一节点的分裂 要尽可能的均衡
因此 在这里不妨采用中位数s作为分割线
也就是说 左侧取0到s-1 右侧取s+1到m-1
而ks作为独立的关键码 居于二者之间
而具体的分裂规则是需要将分界的ks关键码 提升一层
交给此前的父亲 如果有的话
并将刚才左右的两组关键码分别作为它对应的孩子分支
来看一个具体的实例
假设在这样的一个节点中
因为某个关键码的插入 使得关键码的总数多达6
如果该节点所属的恰好是一棵6阶B树
那么这就意味着 在此处发生了一次上溢
为了进行修复 我们要在这6个关键码中选取其中的中位数
相应地 以这个关键码为界
原先的关键码将会分为
左侧的3个一组 以及右侧的2个一组
接下来 中位数关键码 也就是37
将顺着指向该节点的那个引用 逆行向上
并在其父节点中 插入于这个引用所对应的左右两个关键码之间
其结果如下面这个图所示
相应地 原先的这一组关键码就被分割为了左右两组
各自成为一个独立的B树节点
在增加一个引用之后 这两个分裂出的节点
恰好可以作为此前被提升的那个中位数关键码的左和右孩子
至此你不妨验证一下 经如此分裂之后所得的左右两个新节点
尽管关键码的数量相对于此前 几乎折损一半
但依然不会低于B树关于关键码数所设定的下限
相应地 我们也不妨反对来体味一下
B树关于分支数所设定的上界和下界
具体来说 也就是m和m/2的上整
正是得益于这条规则的精妙
使得我们的分裂操作可以在这两个界限之间游刃有余
至此 刚才一度存在的上溢缺陷的确在这个高度已经得到了修复
但故事并没有就此终结
细心的你 可能已经发现
这等效于在这个父节点中插入了一个新关键码
不难理解 父节点在此时同样存在发生上溢的风险
比如倘若它在此前恰好已经处于即将发生上溢的临界状态的话
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试