线性递归算法中的矩阵求幂

时间:2014-04-02 14:37:43

标签: algorithm recursion matrix

我试图通过线性递归来解决http://www.spoj.com/problems/FIBTWIST/问题。但是,由于约束很大,我必须使用矩阵求幂。 我看过http://zobayer.blogspot.in/2010/11/matrix-exponentiation.html 所以根据它形成的方程是

ft(n)=ft(n-1)+ft(n-2)+g(n)    ft(0)=0, ft(0)=1
g(n) =g(n-1)+1                g(1)=0

但现在我很困惑如何形成A * M = B形式的矩阵A和B.它在提到的blogspot链接中作为类型7给出,但我很难理解它。

1 个答案:

答案 0 :(得分:1)

定义第三个序列,fut,Fibonacci-untwist,

  

FUT(N)=英尺(N)+(N + 2)。

然后

  

FUT(N)=英尺(N)+ N + 1 =英尺(N-1)+英尺(N-2)+(N-1)+(N + 2)= FUT(N-2)+ FUT第(n-1)

所以fut只是Fibonacci递归的另一种解决方案,因此

  

FUT(N)= F(N-1)* FUT(0)+ F(N)* FUT(1)= 2 * F(N-1)+ 4 * F(N)= 2 * F( N)+ 2 * F(N + 1)= 2 * F(N + 2)

最后

  

英尺(N)= 2 * F(N + 2) - (N + 2)

测试:

    f(n):   0  1  1  2  3  5  8 13 21 34
2*f(n+2):   2  4  6 10 16 26 42 68
     n+2:   2  3  4  5  6  7  8  9
   ft(n):   0  1  2  5 10 19 34 59

实际上,最后一行是第二行和第三行的差异。