1. 程式人生 > >關於矩陣快速冪的若幹優化

關於矩陣快速冪的若幹優化

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];

關於矩陣快速冪的若幹優化