我正在尝试了解b-tree,我能找到的每个来源似乎都省略了关于如何在保留b-tree属性的同时从树中删除元素的讨论。
有人可以解释算法或指向可以解释它是如何完成的资源吗?
答案 0 :(得分:3)
在维基百科页面上有一个解释。 B-tree - Deletion
答案 1 :(得分:1)
如果你还没有,我强烈推荐Carmen& al 算法导论第3版。
没有描述,因为操作自然源于B树属性。
由于您对节点中元素的数量有一个下限,如果删除元素违反了这个不变量,那么您需要恢复它,这通常涉及与邻居合并(或窃取其某些元素)。
如果您与邻居合并,则需要删除父节点中的元素,这会触发相同的算法。并且你递归地申请,直到你到达顶部。
B-Tree没有重新平衡(至少不是我看到的那些)所以保持红黑树或AVL树的复杂性要小得多,这可能是为什么人们不觉得有必要写关于删除
答案 2 :(得分:0)
你在谈论哪些b树?链接叶子与否?此外,有不同的方法来删除项目(顶部 - 底部,底部 - 顶部等)。本文可能有所帮助:B-trees, Shadowing, and Clones(尽管有许多与文件系统相关的特定内容)。
答案 3 :(得分:0)
CLRS(第2版)中的删除示例可在此处获取:http://ysangkok.github.io/js-clrs-btree/btree.html
按“初始书”,然后按顺序按删除按钮。这将涵盖所有情况。在按下每个按钮之前尝试并预测新的树状态,并尝试识别这些情况是如何唯一的。