首先,我们复习一下矩阵乘法。
我们记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];