是否存在一种算法,该算法在小于n ^ 3次迭代中找到n * n矩阵的乘积?

时间:2014-08-23 16:17:48

标签: algorithm matrix matrix-multiplication

我读到有一种算法可以计算n ^(2.3)复杂度矩阵的乘积,但无法找到算法。

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实际上有一个很好的矩阵乘法算法摘要。以下是来自同一链接的图,显示了不同算法与发现年份相比的欧米茄减少量。

enter image description here https://en.wikipedia.org/wiki/Matrix_multiplication#mediaviewer/File:Bound_on_matrix_multiplication_omega_over_time.svg

答案 1 :(得分:2)

Strassen Algorithm能够将矩阵乘以小于O(n ^ 3)的渐近复杂度。

答案 2 :(得分:1)

Coppersmith-Winograd算法计算O(n ^ {2.375477})渐近时间内NxN矩阵的乘积。