【问题标题】:Order of insertion for worst case black height of a red black tree红黑树的最坏情况黑色高度的插入顺序
【发布时间】:2013-02-13 21:29:54
【问题描述】:

假设我们正在处理键 1-15。要获得常规 BST 的最差性能,您可以按升序或降序插入键,如下所示:

1、2、3、4、5、6、7、8、9、10、11、12、13、14、15

那么BST本质上会变成一个链表。

对于 BST 的最佳情况,您可以按以下顺序插入键,它们的排列方式是下一个插入的键是要插入的总范围的一半,所以第一个是 15/2 = 8 ,然后 8/2 = 4 等等...

8、4、12、2、6、10、14、1、3、5、7、9、11、13、15

那么 BST 将是一棵平衡良好的树,最佳高度为 3。

红黑树的最佳情况也可以用 BST 的最佳情况来构造。但是我们如何构建红黑树的最坏情况呢?它与 BST 的最坏情况相同吗?是否存在会产生最坏情况的特定模式?

【问题讨论】:

  • 嘿,这是一个很好的问题,我想。我对知道答案特别感兴趣。也许 ctheory stackexchange 的人可以在这里提供帮助。那么,如果你可以在那里发布呢?
  • 你能澄清一下half of the total range to be inserted吗?只是好奇,想不通
  • 最坏的情况是相当好的。 Wikipedia 说:“树的平衡并不完美,但足以让它保证在 O(log n) 时间内进行搜索,其中 n 是树中元素的总数。”并且:“[...] 在 [...] 实时应用程序中很有价值 [...] 并且当前 Linux 内核和 epoll 系统调用实现中使用的完全公平调度器使用红黑树。”

标签: binary-search-tree red-black-tree insertion-order


【解决方案1】:

您正在寻找一棵瘦树,对吧?这可以通过以相反的顺序插入[1 ... , 2^(n+1)-2] 来产生。

【讨论】:

    【解决方案2】:

    你将无法做到。红黑树保持自己“浓密”,因此它会旋转以修复不平衡。红黑树的上述最坏情况的长度仅限于两个元素,但这仍然不是“坏”情况;这是预期的,因为 lg(2) = 1,并且您在根之后有 1 层,其中包含两个元素。一旦你添加第三个元素,你就会得到这个:

    B                   B
     \                 / \
      R       =>      R   R
       \
        R
    

    【讨论】:

    • 仅仅因为树平衡了自身,并不意味着没有最坏的情况。在 rb 树实例中,最坏的情况可能涉及到自平衡规则运行不佳的一系列插入
    • 没错,有最坏的情况,但它不会像您发布的那样是线性数组。我误解了你的问题吗?编辑:给定的元素集合有最坏的情况。
    • 用逗号分隔的数字表示插入顺序,而不是数组。这能说明问题吗?
    • 是的,这让问题变得非常有趣。将是一个很好的论文主题。
    猜你喜欢
    • 2013-02-09
    • 2019-03-18
    • 1970-01-01
    • 2020-11-29
    • 2018-11-06
    • 2013-11-17
    • 2019-05-16
    • 2013-02-28
    相关资源
    最近更新 更多