我正在使用Robert Sedgewick的C ++算法,并发现了以下声明:
包含
N
内部节点的二叉树的高度至少为lg N
最多N-1
。最好的情况发生在2^i
的平衡树中 除了底层之外,每个级别的内部节点。如果 高度是“h”然后我们必须2^(h-1) < N+1 <= 2^h
因为有N + 1个外部节点。
关于不平等的解释并不多,所以我的问题是:作者如何推断不平等以及它究竟表现出什么?
谢谢!
答案 0 :(得分:2)
不等式2^(h-1) < N + 1 <= 2^h
表明,对于给定的高度h
,有一系列节点数量将h
作为共同的最小高度。这表示属性:包含 N 节点的所有二叉树的高度至少为log( N )四舍五入到下一个整数。
例如,具有4, 5, 6 or 7
个节点的树最多可以具有3
的最小高度。比这个范围小一个,你就可以得到一棵高度为2
的树;还有一个,你能做的最好的事情就是4
的高度。
如果我们使用 N 的基数2对数来计算从3
节点增长到8
个节点的树的最小高度并向上舍入,则不等式变得清晰:< / p>
log(3) = 1.58 -> 2 [lower bound]
log(4) = 2 -> 3 [2^(h-1)]
log(5) = 2.32 -> 3
log(6) = 2.58 -> 3
log(7) = 2.81 -> 3
log(8) = 3 -> 4 [2^h | upper bound]
注意范围(由N+1
不同的数量组成)与给定树的外部节点数直接相关可能是有用的。使用3
个节点并且高度为2
的树
*
/ \
* *
向此树添加一个节点,
* * * *
/ \ / \ / \ / \
* * or * * or * * or * *
/ \ / \
* * * *
无论你放在哪里,高度都会增加1.我们可以继续创建叶节点而不改变高度,直到树总共包含7个节点,此时,任何进一步的添加都会增加最小可能高度再次:
*
/ \
* *
/ \ / \
* * * *
最初, N 等于3
个节点,这意味着N+1 = 4
我们看到有4
个数量具有共同的最小高度。< / p>
如果您需要更多信息,我建议您查看完整和平衡二叉树的属性。
答案 1 :(得分:0)
让我们调用在{2} N
二进制树中minheight(N)
节点所需的最小高度。
为给定数量N
节点导出树高的下限的一种方法是从另一个方向工作:给定一个高度为h
的树,最大数量是多少可以打包到其中的节点?
让我们调用这个高度为maxnodes(h)
的函数。显然,当树 full 时,即当每个内部节点有2个子节点时,给定高度的二叉树上的节点数最大化。归纳将很快显示maxnodes(h) = 2^h - 1
。
所以,如果我们有N
个节点,那么h
<{em> maxnodes(h) >= N
的每个minheight(N)
:也就是说,你可以适合该高度树上的所有N
个节点。在所有这些上限中,最好的(最紧的)将是最小的。所以我们想要找到的是最小的h
N <= maxnodes(h) = 2^h - 1
那么如何找到这个最小的满意值h
?
maxnodes(h)
的重要特性是它不会减少w.r.t. h
(实际上它是严格增加的,但非减少就足够了)。这意味着您永远不能通过降低其高度来将更多节点放入完整的二叉树中。 (显然很明显,但它有时会解决问题!)这使得重新排列上面的等式来找到h
的最小值容易:
2^h - 1 >= N
2^h >= N+1 # This is the RHS of your inequality, just flipped around
h >= log2(N+1) # This step is only allowed because log(x) is nondecreasing
h
必须为整数,因此满足h
的{{1}}的最小值为h >= log2(N+1)
。
我发现这是描述下界最有用的方法,但它可以用来推导你所询问的不等式的LHS。从上一个区块中的第二个等式开始:
RoundUp(log2(N+1))
满足此不等式的2^h >= N+1
值集合从h
开始,并延伸到正无穷大。由于h = log2(N+1)
是此集合中的最小满意值,因此任何较低的值都不能满足不等式,因此特别是h = log2(N+1)
将不满足它。如果h-1
不等式不在两个实数(非无限)数之间,那么相应的>=
不等式必须成立,所以:
<