加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何在时间复杂度方面优化cpp中的矩阵乘法?

发布时间:2020-12-16 10:12:46 所属栏目:百科 来源:网络整理
导读:鉴于任何2个matrics a和b(没有特殊属性),我们有更好的计算乘法的方法吗? for(i=0; ir1; ++i)for(j=0; jc2; ++j)for(k=0; kc1; ++k){ mult[i][j]+=a[i][k]*b[k][j];} 解决方法 如果你好奇它们是否存在于理论中,那么是的.例如,Strassen算法(见 https://en.wik
鉴于任何2个matrics a和b(没有特殊属性),我们有更好的计算乘法的方法吗?

for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k)
{
    mult[i][j]+=a[i][k]*b[k][j];
}

解决方法

如果你好奇它们是否存在于理论中,那么是的.例如,Strassen算法(见 https://en.wikipedia.org/wiki/Strassen_algorithm).它甚至不是我们所知道的最快的.就我而言,目前最好的是Coppersmith-Winograd算法(见 https://en.wikipedia.org/wiki/Coppersmith%E2%80%93Winograd_algorithm),它类似于O(n ^ {2.37})(Strassen的时间复杂度类似于O(n ^ {2.8}).

但实际上它们比你编写的更难实现,并且它们在O()下隐藏了非常大的时间常数,所以你写的O(n ^ 3)算法在n值较低时更好,更容易实现.

还有一个Strassen的假设,声称对于每个eps> 0有一种算法将两个矩阵与时间复杂度O(n ^ {2 eps})相乘.但是你可能已经注意到它现在只是一个假设.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读