You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

基于Korth《数据库系统概念》的B+树删除伪代码执行疑问

阶为5的B+树删除操作拆解(基于Korth《数据库系统概念》伪代码)

嘿,咱们结合Korth《数据库系统概念》里的B+树删除伪代码,一步步理清楚这个场景的操作流程:

先明确初始状态

我们操作的是阶为5的B+树,当前处于第2层(内部节点层),初始的内部节点结构是:

  • 根节点:[7.0]
  • 根节点的两个子节点(第2层):[3.0, 5.0][9.0, 11.0, 13.0]
  • 这两个第2层节点下方连接着叶子节点

现在执行的是删除函数:delete_entry([3.0, 5.0], 3.0, 子节点指针)


第一步:删除后的节点状态

[3.0,5.0]里的3.0删掉后,这个节点就只剩下[5.0]了。此时第2层的内部节点变成:

  • 节点X:[5.0](原[3.0,5.0]删除后的剩余节点)
  • 节点Y:[9.0,11.0,13.0](相邻兄弟节点)

第二步:触发合并条件(对应伪代码第一个if判断)

根据Korth书中的伪代码逻辑,第一个核心if判断会检查:当前节点的键数低于最小要求,且和相邻兄弟节点合并后(加上父节点的分隔键)不会超过节点的最大键数限制

对于阶为5的B+树:

  • 内部节点的最小键数要求是⌈5/2⌉ - 1 = 2(因为阶m的B+树,内部节点最少要有⌈m/2⌉个子节点,对应键数是子节点数-1)
  • 节点X现在只有1个键,明显低于最小值,触发后续检查
  • 相邻兄弟节点Y有3个键,加上父节点的分隔键7.0,总键数合并后符合最大限制,满足合并条件

满足条件后,执行以下操作:

  1. 把父节点(根节点[7.0])里的分隔键7.0移除,并入到待合并的节点中
  2. 合并节点X、分隔键7.0和节点Y,得到新的内部节点:[5.0,7.0,9.0,11.0,13.0]
  3. 删除原来的节点X和Y,把合并后的新节点挂到父节点下
  4. 此时父节点(原根节点[7.0])因为移除了唯一的键,变成了空节点。由于它是根节点,直接把合并后的新节点设为新的根节点,树的高度也从3层变成了2层。

核心要点总结

  • 阶为5的B+树,内部节点的键数范围是2~4(标准定义),删除后节点键数低于下限就需要调整:优先尝试向兄弟节点借键,借键不可行时触发合并操作
  • 合并操作必须拉父节点的分隔键参与,同时会导致父节点的键数减少,需要递归检查父节点是否还满足要求,直到根节点

内容的提问来源于stack exchange,提问作者James Shaw

火山引擎 最新活动