我对复发方程概念很陌生,需要帮助以下算法
G(n)
Require: A positive integer n.
if n <= 1 then
return n
else
return 5*g(n - 1) - 6* g(n- 2)
end if
我想出了以下关于递归方程:
T(n)= n,如果n <= 1,则 T(n)= 5 * T(n-1) - 6.T(n-2),如果n> 1
这是否正确,我还必须设置此算法执行的乘法次数的递归。请帮忙。
答案 0 :(得分:1)
您在此处构建的重复关系是正确的。它基本上是以一些较小的子问题的形式写出问题。
现在为乘法次数。牢记两件事。
现在再次发生。
T(n)= n,如果n <= 1
T(n)= 5 * T(n-1) - 6.T(n-2),如果n> 1
您有一个递归,在每个步骤将问题更改为两个子问题,并且在每个步骤中,n的值减少1
T(n)= 5 * T(n-1) - 6 * T(n-2) T(n-1)= 5 * T(n-2)-6 * T(n-3)
所以n步骤每次分支成2个子问题所以你会有 2 * 2 * ... 2(O(n)时间) 因此,你的问题中有2 ^ n个步骤,因此O(2 ^ n) 每一步都有2次乘法和1次减法。
乘法次数的重现将是这样的
T(n)= T(n-1)+ T(n-2)+ 2
因此乘法的数量约为(2 ^ n)* 2.