Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定n个节点上的红黑树,任何根到叶路径上的最大红色节点数是多少?_Algorithm_Binary Tree_Binary Search Tree_Red Black Tree - Fatal编程技术网

Algorithm 给定n个节点上的红黑树,任何根到叶路径上的最大红色节点数是多少?

Algorithm 给定n个节点上的红黑树,任何根到叶路径上的最大红色节点数是多少?,algorithm,binary-tree,binary-search-tree,red-black-tree,Algorithm,Binary Tree,Binary Search Tree,Red Black Tree,这是一个问答题。我不确定我的回答是否正确。请帮帮我 假设高度是h,因为没有两个连续的节点(当我们向树的上方)可以是红色的,那么红色节点的最大数量不是h/2吗?(h=对数n) 不知何故,我觉得这不是正确的答案 如有任何帮助/意见,将不胜感激 提前非常感谢 **编辑**此答案假设高度定义为从根到叶(使用,例如in)的最长路径中的节点数,包括“虚拟”黑叶节点。更常见的定义统计边的数量,不包括叶节点。根据此定义,答案是圆形(h/2),如果将叶节点包括到高度圆形(h/2)**编辑结束** 如果遵循中的根节

这是一个问答题。我不确定我的回答是否正确。请帮帮我

假设高度是h,因为没有两个连续的节点(当我们向树的上方)可以是红色的,那么红色节点的最大数量不是h/2吗?(h=对数n)

不知何故,我觉得这不是正确的答案

如有任何帮助/意见,将不胜感激


提前非常感谢

**编辑**此答案假设高度定义为从根到叶(使用,例如in)的最长路径中的节点数,包括“虚拟”黑叶节点。更常见的定义统计边的数量,不包括叶节点。根据此定义,答案是
圆形(h/2)
,如果将叶节点包括到高度
圆形(h/2)
**编辑结束**

如果遵循中的根节点为黑色的规则,则正确答案是小于h/2的最大整数。这只是因为根和叶是黑色的,中间的一半节点(向上舍入)可以是红色的。即
圆形((h-2)/2)

你也可以通过考虑一些不同高度的红黑小树来找到规则

案例
h=1
根为黑色->0个红色节点

案例“h=2”根为黑色,叶为黑色->0个红色节点

Case
h=3
根是黑色,第二级可以是红色,叶子必须是黑色->最大1个红色节点

Case
h=4
根是黑色的,第二级可以是红色,第三级必须是黑色,叶子必须是黑色->最大1个红色节点

案例
h=5
黑、红、黑、红、黑->最多2个红色节点


作为
n
函数的
h
更为复杂,但可以显示
h=h/2
。现在使用这些结果,我们得到
n>=2^bh(x)-1>=2^(h/2)-1
。通过求解
h
,我们得到了答案
h让我们首先看看需要多少节点(最小化n)来创建一个具有1个红色节点的路径(
*
为黑色):

因此,当需要1个红色节点时,n必须至少为5。它有3个叶节点和2个内部节点。删除任何节点都需要删除红色节点,并将其保留在内部

如果要扩展此树以获得具有2个红色节点的路径,可以应用以下两个步骤:

  • 所有的叶子都有两个黑色的孩子
  • 最右边的叶子(刚刚添加)变成了一个红色节点,它得到了两个黑色子节点
  • 美元符号是与上一棵树相比添加的黑色节点:

        *
       / \
      *   R
     /|  / \
    $ $ *   *
       /|  / \
      $ $ $   R
             / \
            $   $
    
    我们选择将红色节点放置在右侧的路径;这种选择不影响结论。请注意,在其他较短路径中添加红色节点没有任何帮助,因为这只会增加节点数,而不会增加红色节点最多的路径

    在步骤1中,叶节点(L)的数量加倍,而作为叶的节点变为内部节点(I)。 第二步将内部节点数和叶数都增加为1。更正式地说,我们可以找到这些公式,其中索引r表示红色节点的数量:

    L1=3
    I1=2

    Lr+1=2Lr+1
    Ir+1=Ir+Lr+1

    将增加r的表格放入:

    我们可以看到以下事实:

    Lr=2r+1-1
    Ir=2r+1-2

    因此:

    nr=2r+2-3

    所以我们有一个公式,可以知道一条有r个红色节点的路径所需的最小节点数。我们需要一个不同的关系:当给定n时,r的最大值

    从上面我们可以得出:


    r=⌊ log2(n+3)⌋ - 2

    路径上红色节点的最大数量为h/2,但h可以大于log_2 N。那么h是多少?我们如何用n来表达它?@MarkJ我更新了关于高度的讨论,用
    n
    。是一棵高2的RB树。为什么这些红色节点不存在?@MichaelFoukarakis我对高度的定义似乎不标准/错误。看到编辑了,我看到了。如果你考虑黑色高度,那么归纳证明可能会更容易。
        *
       / \
      *   R
     /|  / \
    $ $ *   *
       /|  / \
      $ $ $   R
             / \
            $   $
    
      r |   L |   I |  n=L+I
    ----+-----+-----+-------
      1 |   3 |   2 |   5
      2 |   7 |   6 |  13
      3 |  15 |  14 |  29
      4 |  31 |  30 |  61
    ... | ... | ... | ...