我有一个算法
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)复杂度的指数下限?
答案 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序列呈指数增长!