Tree 如何找到递归树的高度?

Tree 如何找到递归树的高度?,tree,recurrence,Tree,Recurrence,我知道当T(n)的形式为T(n)=a*T(n/b)+cn时,高度h=n的基b,树朝向T(1)()。但是我不知道如何计算T(n)在(n-b)+cn形式下的高度。b的减法简直把我吓坏了。T(n)是否仍然指向T(1)?你怎么知道这棵树的高度 如果这不是正确的论坛,请告诉我正确的站点。在递归关系中,树的每个“级别”对应一个递归函数调用。在旧的情况下,我们是分开的。这可以看作是将问题分解为多个子问题 考虑此函数,它计算阶乘: function fact(n) { if(n == 0) return

我知道当T(n)的形式为T(n)=a*T(n/b)+cn时,高度h=n的基b,树朝向T(1)()。但是我不知道如何计算T(n)在(n-b)+cn形式下的高度。b的减法简直把我吓坏了。T(n)是否仍然指向T(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元树链接。

你对斐波那契的分析是错误的。仅仅因为它是一个二叉树,这并不意味着高度是log(n)。高度是对数(#节点),实际上是线性的,因为我们有指数节点。如果我们将输入大小除以一个常数,这是对数的。减去将导致线性。我们可以很容易地看到这一点,因为如果我们减去2,需要n/2个递归调用才能从n变为0。目前我已经删除了不正确的信息。今晚晚些时候我将编辑以添加更多细节。