0
我有一个问题,我需要帮助。我给出了:如何计算树中给定算法的节点数量?
int sum(int[] array, int first, int last)
{
if (first == last)
return array[first];
int mid = (first + last)/2;
return sum(array, first, mid) + sum(array, mid + 1, last);
}
问题:确定一个计算递归树中节点数的公式。
所以,我得到的递归等式: T(N)= 2T(N/2)+ DN
而且例如用于长度为8的中递归树的阵列,节点的数目将是15 ,这表明树中节点的数量是2n-1,其中n是数组的大小。
我想知道我的想法是否正确,并且2n-1公式能否适用于任何情况?另外,有没有一种通用的方法来计算递归树中给定递归算法的节点数?
谢谢你的帮助!
什么是** dn **,代码代表什么代价? – trincot
@trincot ** dn **可能代表加法操作的成本以及函数中的其他一些常量操作。因为** 2T(n/2)**这个术语是用于递归调用的,任何剩余的操作(比较,** mid **和加法和返回的计算)都需要一定的时间。 T(n)= 2T(n/2)+ c – Shubham
我只是觉得** dn **中出现** n **是可疑的。只是想确保它不依赖于** n **的价值。 – trincot