【问题标题】:Does an algorithm exist that finds the product of a n*n matrix in less than n^3 iteration?是否存在在少于 n^3 次迭代中找到 n*n 矩阵乘积的算法?
【发布时间】:2014-08-23 16:17:48
【问题描述】:

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

【问题讨论】:

标签: algorithm matrix matrix-multiplication


【解决方案1】:

已经找到了几种用于矩阵乘法的算法,其大 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 实际上对矩阵乘法算法有一个很好的总结。以下是来自同一链接的图表,显示了不同算法与发现年份的 omega 减少情况。

https://en.wikipedia.org/wiki/Matrix_multiplication#mediaviewer/File:Bound_on_matrix_multiplication_omega_over_time.svg

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,但出于所有实际目的,它会比 O(n^3) 算法慢得多,因为 n^2.375477 项前面的常数比 from 中的那个大得多n^3 项。渐近时间复杂度可能会产生误导。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多