矩阵快速幂(Matrix_Fast_Power)
一、基礎知識
(1)矩陣乘法
https://blog.csdn.net/weixin_43272781/article/details/82899737
簡單的說矩陣就是二維數(shù)組,數(shù)存在里面,矩陣乘法的規(guī)則:A*B=C
其中c[i][j]為A的第i行與B的第j列對應乘積的和,即:
代碼:
const int N=100; int c[N][N]; void multi(int a[][N],int b[][N],int n)//n是矩陣大小,n<N {memset(c,0,sizeof c);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)c[i][j]+=a[i][k]*b[k][j]; }另一種寫法:
int c[N][N]; void multi(int a[][N],int b[][N],int n) {memset(c,0,sizeof c);for(int i=1;i<=n;i++)for(int k=1;k<=n;k++)for(int j=1;j<=n;j++)c[i][j]+=a[i][k]*b[k][j]; }
這種可以在第二重for判斷if(a[i][k]==0)continue;對于矩陣有較多0的有一定效果。不過一般第一種寫法就夠了,這種知道就行。
顯然矩陣乘法的復雜度是O(n^3);(O(n^2.7)的方法不會寫,無視這里)。
這里我直接寫的是n*n的矩陣(即方陣),顯然兩個相乘是要一行和一列對應乘,那么矩陣乘法是需要A的行數(shù)與B的列數(shù)相等的(這是A*B的前提條件,可見矩陣的乘法是不滿足交換律的)。然而這些一般都是沒什么用的,矩陣快速冪只會用到方陣(除非題目是裸的矩陣乘法)。矩陣快速冪都是方陣也就避免的相乘的前提條件,可以放心用。
二、矩陣構(gòu)造方法
https://blog.csdn.net/weixin_43272781/article/details/88878064
三、矩陣快速冪
如果不知道快速冪的請參考:https://blog.csdn.net/weixin_43272781/article/details/85058595
const int N=10; int tmp[N][N]; void multi(int a[][N],int b[][N],int n) {memset(tmp,0,sizeof tmp);for(int i=0;i<n;i++)for(int j=0;j<n;j++)for(int k=0;k<n;k++)tmp[i][j]+=a[i][k]*b[k][j];for(int i=0;i<n;i++)for(int j=0;j<n;j++)a[i][j]=tmp[i][j]; } int res[N][N]; void Pow(int a[][N],int n) {memset(res,0,sizeof res);//n是冪,N是矩陣大小for(int i=0;i<N;i++) res[i][i]=1;while(n){if(n&1)multi(res,a,N);//res=res*a;復制直接在multi里面實現(xiàn)了;multi(a,a,N);//a=a*an>>=1;} }值得注意的是矩陣快速冪只適用于n*n的矩陣方陣。?
四、例題
http://poj.org/problem?id=3070
http://poj.org/problem?id=3233
http://acm.hdu.edu.cn/showproblem.php?pid=2276
http://acm.hdu.edu.cn/showproblem.php?pid=5015
https://ac.nowcoder.com/acm/contest/338/L(題解:https://blog.csdn.net/weixin_43272781/article/details/85937715)
http://acm.hdu.edu.cn/showproblem.php?pid=3306?
http://acm.hdu.edu.cn/showproblem.php?pid=2157(題解:https://blog.csdn.net/weixin_43272781/article/details/88958713)
五、參考文章
http://www.matrix67.com/blog/archives/276
http://www.cnblogs.com/frog112111/archive/2013/05/19/3087648.html?tdsourcetag=s_pcqq_aiomsg?
https://www.cnblogs.com/frog112111/archive/2013/05/15/3080678.html?
https://www.cnblogs.com/frog112111/archive/2013/05/16/3081493.html?
https://www.cnblogs.com/frog112111/archive/2013/05/16/3082416.html
https://www.cnblogs.com/frog112111/archive/2013/05/20/3089358.html
https://www.cnblogs.com/frog112111/archive/2013/05/20/3089687.html
https://www.cnblogs.com/frog112111/archive/2013/05/21/3089953.html
https://www.cnblogs.com/frog112111/archive/2013/05/22/3092012.html
https://www.cnblogs.com/frog112111/archive/2013/05/20/3089802.html
https://www.cnblogs.com/frog112111/archive/2013/05/22/3093697.html
https://www.cnblogs.com/frog112111/archive/2013/05/22/3093757.html?
總結(jié)
以上是生活随笔為你收集整理的矩阵快速幂(Matrix_Fast_Power)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sum in the tree
- 下一篇: SG函数和SG定理(Sprague_Gr