算法题目:A为矩阵,求S(n)=A^1+A^2+...+A^n 小技巧

来源:互联网 发布:java线程池创建的方式 编辑:程序博客网 时间:2024/04/19 12:35
解题思路:

第一种方法:

题意为给定矩阵A,以及k, mod ,求 A+A^2+A^3+......A^k    的和对mod取余。

一开始用循环k次,递推的做法,超时。。。

看了解题报告,求和的时候要用到二分求和。

所求的和用s(k)表示。

当k为偶数时:

比如 k=6,那么  A+A^2+A^3+A^4+A^5+A^6=    A+A^2+A^3+   A^3*(A+A^2+A^3)   

s(k)=s(k/2)+A^(n/2) * s(k/2) 即s(k)=(E+A^(n/2))*s(n/2)  (E为单位矩阵)

当k为奇数时:

s(k)=s(k-1)+A^k ,  那么k-1为偶数,可以按照上面的二分

matrix call(matrix A,int k)  {      if(k==1) return A;      if(k&1)          return addmatrix(call(A,k-1),powmatrix(A,k));//当k为奇数时,减1变为偶数 S(K)=S(K-1)+A^K      else          return mulmatrix(addmatrix(powematrix(A,0),powmatrix(A,k>>1)),call(A,k>>1));          //当K为偶数时,S(K)=(1+A^(K/2))*S(K/2)  } 


阅读全文
0 0
原创粉丝点击