你如何找到重复树的高度?

时间:2014-02-04 23:09:05

标签: tree recurrence

据我所知,当你有T(n)形式T(n)= a * T(n / b)+ cn时,高度h = n的基数b,树就会朝向T(1)( How to determine the height of a recursion tree from a recurrence relation?)。但我很困惑如何以T(n)= aT(n-b)+ cn的形式找到T(n)的高度。 b的减法完全让我失望。 T(n)是否仍然是T(1)?你如何找到树的高度?

如果这不是正确的论坛,请将我引导至正确的网站。

1 个答案:

答案 0 :(得分:1)

在递归关系中,树的每个“级别”对应于递归函数调用。在旧的情景中,我们正在分裂。这可以被认为是将问题分解为多个子问题。

考虑这个函数,它计算一个阶乘:

function fact(n) {
    if(n == 0) return 1
    else return n*fact(n-1);
}

此功能与上述功能的不同之处在于它只调用一次。递归树是线性的,因为在每次递归调用中,问题都被分解为一个子组。

回到关系T(n)= a * T(n-b)+ cn,注意我们可以添加另一个常数d = 1,并按如下方式写出:

T(n)=a*T(n/d-b)+cn

现在这个关系共享原始关系的形式,我们可以看到它每个步骤被​​分解为1个子组。因此,该关系对应于具有线性递归树的算法(即O(n))。

-b术语是导致问题缩小的必要条件。如果b = 0,那么T(n)= a * T(n)显然是无终止的。只要我们可以确定在每一步,输入的大小总是在减小,那么我们可以确定该函数最终会达到n = 1.

在这里,您可以找到阶乘算法的递归树图像。您已经将案例的版本与b-ary树链接在一起。 http://faculty.cs.niu.edu/~freedman/241/241notes/recur.gif