码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-12-11 21:10:24      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:一般来说   好处   gpo   顺序   c中   元素   方法   计算   log   

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

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

 

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

标签:一般来说   好处   gpo   顺序   c中   元素   方法   计算   log   

原文地址:http://www.cnblogs.com/lher/p/8024949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!