如何计算给定算法树中节点的数量?

时间:2016-05-29 17:51:31

标签: algorithm math data-structures tree discrete-mathematics

我有一个问题,我需要帮助。我给了:

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公式是否适用于任何情况?另外,在给定递归算法的情况下,是否存在计算递归树中节点数的一般方法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

       2
     /  \
    1    1    // 2(n) - 1 = 2(2) - 1 = 3 seems to match!

        3
      /  \
     2    1
   /  \
  1    1      // 2(n) - 1 = 2(3) - 1 = 5 which seems to match

计算一些其他例子,公式2(n) - 1似乎是正确的。