【问题标题】:Deleting a whole subtree of a red-black tree would keep its properties?删除红黑树的整个子树会保留其属性吗?
【发布时间】:2011-08-05 15:09:49
【问题描述】:

我目前正在实现一个红黑树数据结构来为应用程序执行一些优化。

在我的应用程序中,在给定点,我需要从树中删除所有小于或等于给定值的元素(您可以假设这些元素是整数)。

我可以一个一个地删除元素,但我想要更快的东西。因此,我的问题是:如果我删除一棵红黑树的整个子树,我该如何修复这棵树以恢复高度和颜色不变量?

【问题讨论】:

    标签: algorithm data-structures binary-tree red-black-tree


    【解决方案1】:

    从红黑树中批量删除很困难,因为黑高不变量被搞砸了。假设您没有进行(软)实时操作,我会一个一个地删除(因为您必须一个一个地插入它们,我们在这里讨论的是一个较小的常数因子)或切换到一个展开树.

    【讨论】:

      【解决方案2】:

      从红黑树中删除一个元素需要 O(log n) 时间,其中 n 是树中当前元素的数量。

      如果你只删除了几个元素,那么最好只一个一个地删除它们,最终以 O(k log n) 操作结束(k = 删除的元素,n = 删除前树中的元素)。

      但是如果你知道你要移除大量的节点(例如树的 50% 或更多),那么最好遍历你想要保留的元素 (O(k') 操作其中 k ' = 要保留的元素),然后报废树(O(1) 或 O(n),具体取决于您的内存管理方案)并重建树(O(k' log k'))操作。总复杂度为 O(k')+O(k' log k') = O(k' log k'),当 k'

      好吧,无论如何,当您要删除大部分元素时,最好在实践中枚举您想要保留的元素,然后重建树。

      【讨论】:

        【解决方案3】:

        编辑:下面是一个通用的子树删除。您需要的只是一个Split 操作(根据您的实际问题内容)。

        在最坏的情况下O(log n)时间可以删除红黑树的整个子树。

        已知SplitJoin对红黑树的操作可以在O(log n)时间内完成。

        Split : 给定一个值 k 和一个红黑树 T,将 T 拆分为两棵红黑树 T1 和 T2,使得 T1 中的所有值 = k.

        Join : 将两棵红黑树 T1 和 T2 合并成一棵红黑树 T。 T1 和 T2 满足 T1 中的 max

        你需要的是两个Splits和一个Join

        在您的情况下,您需要删除的子树将对应于一系列值L <= v <= U

        因此,您首先在 L 上 Split,在 T1 Split U 上的 T2 以在 T3 Join T1 和 T4 树。

        在 pseudoCode 中,您的代码将如下所示:

        Tree DeleteSubTree( Tree tree, Tree subTree) {
        
            Key L = subTree.Min();
            Key U = subTree.Max();
        
            Pair <Tree> splitOnL = tree.Split(L);
            Pair <Tree> splitOnU = splitOnL.Right.Split(U);
        
            Tree newTree = splitOnL.Left.Join(splitOnU.Right);
        
            return newTree;
        }
        

        更多信息请参见:https://cstheory.stackexchange.com/questions/1045/subrange-of-a-red-and-black-tree

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-23
          • 2016-08-03
          • 2021-01-03
          • 2014-07-05
          • 2021-10-17
          • 2022-12-16
          • 2011-03-27
          相关资源
          最近更新 更多