關於矩陣快速冪的若幹優化
阿新 • • 發佈:2017-12-11
nbsp 好處 gpo += ron 快速 class 貢獻 復習
首先,我們復習一下矩陣乘法。
我們記3個矩陣A(a行b列),B(b行c列),C(a行c列)。我們要計算A*B,並把答案存到矩陣C中。
C[i][j]+=A[i][k]*B[k][j](1<=i<=a,1<=j<=c,1<=k<=b),即新矩陣的第i行第j個元素是原1矩陣的第i行*原2矩陣的第j列得來的。
一般來說,我們的計算方法是for(int i=1;i<=a;i++)for(int j=1;j<=c;j++)for(int k=1;k<=b;k++)C[i][j]+=A[i][k]*B[k][j];
(1)對於稀疏矩陣的優化
稀疏矩陣,即為矩陣中有很多元素為0。
優化方法:改變循環順序。改為for(int i=1;i<=a;i++)for(int k=1;k<=b;k++)for(int j=1;j<=c;j++)C[i][j]+=A[i][k]*B[k][j];
這樣有什麽好處呢?
我們可以發現,只要A[i][k]==0,那麽對答案矩陣(C)不會有任何貢獻。
所以我們可以進行優化,在第二個循環到第三個循環直接加一個if,若A[i][k]!=0,才進入第三個循環。
for(int i=1;i<=a;i++)for(int k=1;k<=b;k++)if(A[i][k])for(int j=1;j<=c;j++)C[i][j]+=A[i][k]*B[k][j];
關於矩陣快速冪的若幹優化