演算法題目:A為矩陣,求S(n)=A^1+A^2+...+A^n 小技巧
阿新 • • 發佈:2018-12-24
解題思路:
第一種方法:
題意為給定矩陣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) }