算法

时间:2015-09-06 19:42:37

标签: algorithm math data-structures recurrence

我对复发方程概念很陌生,需要帮助以下算法

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

这是否正确,我还必须设置此算法执行的乘法次数的递归。请帮忙。

1 个答案:

答案 0 :(得分:1)

您在此处构建的重复关系是正确的。它基本上是以一些较小的子问题的形式写出问题。

现在为乘法次数。牢记两件事。

  1. 您需要在递归关系中按下以达到基本情况的步骤数(在这种情况下n <= 1)。
  2. 每种情况下的操作次数。
  3. 现在再次发生。

      

    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.