【问题标题】:How do you remove an element from a b-tree?如何从 b-tree 中删除元素?
【发布时间】:2011-07-08 08:10:00
【问题描述】:

我正在尝试了解 b-tree,而我能找到的每个来源似乎都忽略了有关如何在保留 b-tree 属性的同时从树中删除元素的讨论。

谁能解释一下这个算法或给我指点可以解释它是如何完成的资源?

【问题讨论】:

  • 哈哈,没错:我也注意到大多数书籍似乎都在 B-tree 中删除了“作为读者的练习”……那些混蛋。 ;-)

标签: algorithm data-structures b-tree


【解决方案1】:

如果你还没有,我强烈推荐 Carmen & alIntroduction to Algorithms 3rd Edition

没有描述,因为操作自然源于 B-Tree 属性。

由于您对节点中的元素数量有一个下限,如果删除您的元素违反了这个不变量,那么您需要恢复它,这通常涉及与邻居合并(或窃取它的一些元素)。

如果与邻居合并,则需要删除父节点中的一个元素,这会触发相同的算法。并且你递归地应用直到你到达顶部。

B-Tree 没有重新平衡(至少不是我看到的那些),因此维护红黑树或 AVL 树要简单得多,这可能是人们不觉得有必要写下有关移除的原因.

【讨论】:

    【解决方案2】:

    在维基百科页面上有一个解释。 B-tree - Deletion

    【讨论】:

      【解决方案3】:

      您在谈论哪些 b 树?是否有连叶?此外,还有不同的移除项目的方法(自上而下、自下而上等)。这篇论文可能会有所帮助:B-trees, Shadowing, and Clones(尽管有很多文件系统相关的东西)。

      【讨论】:

        【解决方案4】:

        CLRS(第 2 版)的删除示例可在此处获得:http://ysangkok.github.io/js-clrs-btree/btree.html

        按“初始化书”,然后按顺序按删除按钮。这将涵盖所有情况。在按下每个按钮之前尝试预测新的树状态,并尝试识别这些案例是如何独一无二的。

        【讨论】:

          猜你喜欢
          • 2017-03-13
          • 1970-01-01
          • 1970-01-01
          • 2016-02-13
          • 1970-01-01
          • 2011-02-28
          • 2014-11-16
          • 1970-01-01
          • 2013-02-28
          相关资源
          最近更新 更多