矩阵在编程中的一个小应用

 

 比如我们已经知道f1=1,f2=1,fn=a*fn-2+b*fn-1。用普通方法求fn就是一个循环。从3循环到n,时间复杂度为O(n)。下面用另一种方法求fn的值。

设矩阵 A =     B = 

则A*B= * =

A*A*B = A*(A*B) = *=

A*A*….*B=A(n-2) *B =    式(1)

如何求一个数a的b次幂a^b(使用快速幂算法,时间复杂度为lgn)。

假设b=6,用二制表示就是2^2*1+2^1*1+2^0*0  (6的二进制为110)

则a^b=a^(2^2+2^1)=a^(2^2)*a^(2^1)  注:A^(x+y)=A^x*A^y

 

求a^b的C伪代码

result=1;

while(b!=0)

{

       if(b& 1)

              result= result*a

       a= a*a;

   b= b>>1;

}

利用式1求f(1000)的值,需要进行大概10次的矩阵乘法运算,每次矩阵乘法需要8次乘法运算和4次加算法运算共需要大约120次运算就可以求出f(1000)的值。比原来的1000次运算快了近10倍。构造矩阵主要是为了能够使用快速幂来加快运算。


posted @ 2013-07-25 18:05  javawebsoa  Views(277)  Comments(0Edit  收藏  举报