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