【问题标题】:Is a resultant red-black tree after insertion unique?插入后得到的红黑树是唯一的吗?
【发布时间】:2011-10-08 17:19:15
【问题描述】:

假设我有一棵二叉搜索树,它最初满足所有red-black conditions,并且对于某个集合S 中的每个整数s 都包含一个节点。接下来,我要新建一个节点;说a(不在S中)。

这种添加的结果在重新平衡后是否是唯一的?

换一种说法:插入节点后是否只有一种方法可以重新平衡红黑树?

我相信它们不是独一无二的,尽管我没有提供任何证据(也没有多少信心)。我只是想知道是否有比我更博学的人会如此好心地启迪我?

【问题讨论】:

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


    【解决方案1】:

    它们不是唯一的。

    一个简单的证明是做一个微不足道的算法改变,比如检查我们是否可以改变根的颜色,并提供一个仍然有效的情况,例如:

        1-B
       /  \
     0-R  2-R
    

    add(3):

        1-B
       /  \
     0-B  2-B
            \
            3-R
    

    但是新算法可以很容易地产生

        1-R
       /  \
     0-B  2-B
            \
            3-R
    

    根是不同的颜色,但当然树都是有效的 RB 树。

    这可能看起来有点微不足道,但您可以扩展这个想法(如果您想要一个不那么微不足道的证明)来检查不仅仅是根。您可以深入检查 O(1) 级别以进行不平凡但有效的更改,这将生成具有相同运行时间的两种不同算法。

    例如,检查前 10 行是否已满且为黑色,并将奇数行更改为红色,将产生额外的常数工作(即 O(1))和新算法。

    我应该注意,这只是非唯一性的证明,而不是非唯一性数量的限制。 IE。像这样微不足道的事情足以证明这一点,但它为在更基本的方面不同的 RB 算法敞开了大门。

    【讨论】:

    • 很抱歉——我一直在阅读这篇文章并试图解决它,但遇到了麻烦。你的例子的症结是我们可以改变算法并证明两种算法都能生成有效的红黑树吗?如果我们添加根必须始终为黑色的附加限制(尽管就黑色高度而言确实无关紧要)
    • @Ryan,这就是为什么我解释说这个想法可以扩展到根之外。是的,我们的想法是我们可以生成两种算法,在某种情况下会生成两种不同的有效 RB 树。
    • 哦,我明白了——当你说 O(1) 级深时,你的意思是相对于根,还是相对于刚刚添加的节点? (也许没关系)。如果错了,请纠正我,但您要说的是:我可能有两种算法,唯一的区别是一种算法进行了重要但有效的更改,该更改仍保持红黑完整性。也许就像将 2 级的两个节点都更改为黑色(因为这不会改变任何叶子的黑色高度)。因此,我证明算法不是唯一的。
    • @Ryan, O(1) 相对于根。你是对的,这就是想法,尽管就像我最后指出的那样,这并不意味着这就是 RB 算法的差异程度。仍然可能存在更普遍的差异。
    • 所以,请原谅我在这里仓促的概括,但是,有人可以说任何红黑算法的插入/删除不变量只是满足 4(或 5)个红黑属性,不管树是如何被操纵的?也许我用错了(只是试图对此建立更多的直觉)
    【解决方案2】:

    没有多重算法。

    让我们从这两个命题开始:

    • 内部4个节点的红黑树数为3
    • 内部节点数为5的红黑树为8个

    现在,假设有一个独特的算法可以将一个节点添加到一个 4 内部节点红黑树。那么应该只有 3 棵红黑树和 5 个内部节点,因为该算法导致一个单一的结果。

    这很荒谬,因为具有 5 个内部节点的红黑树的数量是 8。

    (参见PIGEONHOLE PRINCIPLE

    因此有多种“红黑”算法

    希望我明白你的意思。

    【讨论】:

    • 我喜欢这种方法,但我需要多考虑一下(此时抽象出太多细节让我感到困惑)。
    • 我明白你现在在说什么了。但是,如果我们在 4 节点的 RB 树中添加一个随机节点,结果只能是 8 个 RB 树的形式,其中包含 5 个内部节点。但是,问题是:固定了 a,我们将添加的节点,对于 给定 a,是否有多个 5 内部节点解决方案?
    • 对于一个 4 节点树,它们最多有 4 个位置,您可以添加一个节点来创建一个 5 节点树。如果存在 8 个 5 节点树,则在列表中添加具有超过 2 个可能的 RB 输出树的节点(pigeonHole 原则),因此存在一个回答您的问题的 a。但是你不能证明所有的'a'。实际上 davin 证明只在一种情况下证明它,而不是针对所有添加的节点(参见 davin proofs 中的第二条评论:“在某些情况下”
    • 不是有 6 个可能的位置可以将节点添加到 4 内部节点树吗?
    猜你喜欢
    • 2022-12-16
    • 2018-11-06
    • 2013-11-17
    • 2013-02-28
    • 2013-02-01
    • 2018-05-30
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多