确定算法乘法次数的递归关系

时间:2014-08-04 07:22:09

标签: algorithm recursion recurrence

我有一个算法

R(N)
{
    if(n<=2) return n;
    else
        sum=0;
        for i=1 to n-2
             sum+=(n-1)*R(i)
     return sum;
}

我想得到R(n)执行的乘法运算次数的重现。 如果

T(n)=0 for n<=2

对于n> 2的T(n)是什么?

此外,如何显示M(n)复杂度的指数下限?

1 个答案:

答案 0 :(得分:1)

1)对于n> 2:
T(n) = sum(f(i) + 1 for i from 1 to n - 2) = n - 2 + sum(f(i) for i from 1 to n - 2)   第一个等式是正确的,因为R(1), R(2), ..., R(n - 2)   被递归地调用,并且执行一次乘法   每次通话后。

2)指数下界的证明:

a)假设g(i)是这样一个序列:   g(0) = 0
  g(1) = 1
  g(2) = 1
  g(3) = 1
  g(i) = g(i - 2) + g(i - 3) for i >= 4
  然后g(i) <= R(i + 3)为任何有效的i,因为   通过删除g(i)n - 2获取g(1), g(2),...,g(i - 4)的公式   R的递归公式的右侧(并且所有术语都是非负的)。

b)另一方面,g(i) >= f(i / 2),其中f(i)是斐波纳契数列   (这里我假设f(0) = 0, f(1) = 1, f(2) = 1等等。)   证明:
    1)基本情况:对于i <= 4,这种不等式成立(可以简单地检查它)     2)归纳:       g(i) = g(i - 2) + g(i - 3) >= f((i - 2) / 2) + f((i - 3) / 2) >= f(i / 2 - 1) + f(i / 2 - 2) = f(i / 2)

c)因此,f(i) <= g(i) <= R(i + 3)因此R受Fibonacci序列的限制。 Fibonacci序列呈指数增长!