关于矩阵快速幂的若干优化

Posted lh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于矩阵快速幂的若干优化相关的知识,希望对你有一定的参考价值。

首先,我们复习一下矩阵乘法。

我们记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];

 

以上是关于关于矩阵快速幂的若干优化的主要内容,如果未能解决你的问题,请参考以下文章

关于矩阵快速幂的用法总结QwQ

“玲珑杯”ACM比赛 Round #12 (D) 矩阵快速幂的时间优化

矩阵快速幂

有关矩阵快速幂

浅谈矩阵快速幂

poj3233(矩阵快速幂的和)