【发布时间】:2021-05-13 04:26:07
【问题描述】:
我有一个任务,我必须在 B+ 树中添加和删除操作。我意识到非叶节点中存在一些数字,但叶节点中没有。我立即问我的助教,“B+ 树如何包含其任何叶节点中都不存在的元素?”。他的回答是“我想象叶子节点中不存在但存在于非叶子节点中的数字是被删除的元素。”
有可能吗? 我们不是在删除 B+ 树中的每个元素时都删除它吗?
如果可能的话,你能举一个发生这种情况的插入和删除顺序的例子吗?
【问题讨论】:
我有一个任务,我必须在 B+ 树中添加和删除操作。我意识到非叶节点中存在一些数字,但叶节点中没有。我立即问我的助教,“B+ 树如何包含其任何叶节点中都不存在的元素?”。他的回答是“我想象叶子节点中不存在但存在于非叶子节点中的数字是被删除的元素。”
有可能吗? 我们不是在删除 B+ 树中的每个元素时都删除它吗?
如果可能的话,你能举一个发生这种情况的插入和删除顺序的例子吗?
【问题讨论】:
B+-trees 可以用不同的方式来实现关于非叶节点使用的键。
这些键的目的是支持查找,即唯一的约束是每个非叶节点的键定义的间隔与后代叶节点的实际键一致。
将在叶子节点找到的密钥作为非叶子节点的密钥重用是一种可能的做法并且很方便,因为它避免了任意“组成”非叶子密钥,但这不是 B+-trees 的要求。特别是在删除叶子键或节点时,更新所有祖先非叶子键会造成不必要的开销,不这样做效率更高。
另一种可能的做法是使用叶键的前缀,在精神上类似于(但不一样)tries。
【讨论】: