了解k-ary树高度的公式

时间:2016-02-10 20:31:03

标签: algorithm sorting math

所以我发现找到k-ary tree的高度的公式是

  

ceil(log_k(k-1)+ log_k(n) - 1)

其中 n 是树中节点或元素的数量。

我的问题是理解这个公式。你是怎么发现这个以及如何证明的?

1 个答案:

答案 0 :(得分:1)

嗯,更容易想到深度为d的k-ary树首先有多少个节点然后求解方程式。所以这很容易递归定义。深度为0的树只有一个节点。深度为d + 1的树的k次是子树的大小加上一个新节点,所以我们得到

s(0) = 1
s(d+1) = k*s(d)+1

现在,要么有理论来解决这样的递归方程,要么你可以尝试猜测它并证明你的猜测。因为这更容易,这就是我们要做的。我们的假设是:

s(d) = (k^(d+1)-1)/(k-1)

我们可以通过深度感应轻松证明这一点。基本情况:

s(0) = 1
(k^1-1)/(k-1)=1

诱导步骤:

s(d+1) = k*s(d)+1 (now we apply the induction hypothesis)
= k*(k^(d+1)-1)/(k-1) + 1 = (k^((d+1)-k)+k-1)/(k-1)
= (k^((d+1)+1) - 1)/(k-1)

所以现在我们已经证明我们只是解决了这个等式:

s = (k^(d+1)-1)/(k-1)
s*(k-1)+1 = k^(d+1)
log_k(s*(k-1)+1) = d+1
d = log_k(s*(k-1)+1)-1

几乎就在那里。现在我们只对自然数感兴趣,并且我们知道log_k(s *(k-1)+1)总是必须是自然数,如果s和k是。我们也知道log_k(x + 1) - log_k(x)< 1表示任何k> = 2且x>所以我们可以写成:

d = ceil(log_k(s*(k-1))-1)
= ceil(log_k(s)+log_k(k-1))-1)