矩阵相乘入门,两个矩阵相乘
生活随笔
收集整理的這篇文章主要介紹了
矩阵相乘入门,两个矩阵相乘
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?矩陣:矩陣可以看成一個n×m的數表,用二維數組表示
?矩陣乘法:定義矩陣A,B。A和B可以乘法操作當且僅當A的大小是a×b,B的大小是b×c,設矩陣C=AB,則C的大小是a×c,且有
??? 最普通的矩陣乘法是直接三個for循環直接計算而已,所以復雜度是O(n3)
#include<iostream> using namespace std; int main() { int i,j,k; const int m=3,r=4,n=3; int a[m][r],b[r][n],c[m][n]={0}; //之前別忘清0 cout<<"請輸入a矩陣:"<<endl; for(i=0;i<m;i++)for(j=0;j<r;j++)cin>>a[j]; cout<<"請輸入b矩陣:"<<endl; for(i=0;i<r;i++)for(j=0;j<n;j++)cin>>b[j]; cout<<"兩矩陣的積為:"<<endl; for(i=0;i<m;i++)for(j=0;j<n;j++){for(k=0;k<r;k++)c[j]=c[j]+a[k]*b[k][j];cout<<c[j]<<" ";if(j==n-1) cout<<endl;} //使用這個方法可輸出矩陣格式return 0; }先了解連那個簡單的矩陣相乘,然后再來
?快速冪:矩陣的快速冪是用來高效地計算矩陣的高次方的。將樸素的O(n)的時間復雜度,降到O(logn)??? 大家首先要認識到這一點:任何一個整數N,都能用二進制來表示
??? 例如:25?????? 二進制表示為? 11001
運用矩陣乘法快速冪,可以快速計算出矩陣B^(n-1),這樣實現將時間復雜度降低到O(log n)
?
?
??首先將這n次置換“合并”起來(算出這n次置換的乘積),然后接下來我們需要執行這個置換即可。注意任意一個置換都可以表示成矩陣的形式。?? 上面的例子矩陣為: 0?? 1?? 0?? 0?? 0
??????????????????????????????????????????? 1?? 0?? 0?? 0?? 0
??????????????????????????????????????????? 0?? 0?? 1?? 0?? 0
??????????????????????????????????????????? 0?? 0?? 0?? 0?? 1
??????????????????????????????????????????? 0?? 0?? 0?? 1?? 0
?
????
總結
以上是生活随笔為你收集整理的矩阵相乘入门,两个矩阵相乘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 还是树形dp 也可以用最短路来写--N
- 下一篇: NOJI 148 fibonacci数