我读到有一种算法可以计算n ^(2.3)复杂度矩阵的乘积,但无法找到算法。
答案 0 :(得分:4)
已经发现了几种用于矩阵乘法的算法,其中大O小于n ^ 3。但这是基于大O符号得出结论的问题之一。当n变为无穷大时,它仅给出限制行为。在这种情况下,更有用的指标是总时间复杂度,包括系数和低阶项。
对于一般算法,时间复杂度可以是An ^ 3 + Bn ^ 2 + ...
对于Coppersmith-Winograd算法的情况,n ^ 2.375477项的系数非常大,以至于出于所有实际目的,具有O(n ^ 3)复杂度的通用算法更快。
如果Strassen Algorithm用于单个元素,也是如此。然而, 有一个paper声称使用混合算法使用Strassen算法将矩阵块降低到某个极限,然后切换到O(n ^ 3)算法对于大型矩阵来说更快。
因此,尽管存在具有较小时间复杂度的算法,但我所知道的唯一有用的是Strassen算法,并且仅适用于大型矩阵(无论大型方法)。
编辑:Wikipedia实际上有一个很好的矩阵乘法算法摘要。以下是来自同一链接的图,显示了不同算法与发现年份相比的欧米茄减少量。
答案 1 :(得分:2)
Strassen Algorithm能够将矩阵乘以小于O(n ^ 3)的渐近复杂度。
答案 2 :(得分:1)
Coppersmith-Winograd算法计算O(n ^ {2.375477})渐近时间内NxN矩阵的乘积。