击败 Strassen 算法的算法

Posted

技术标签:

【中文标题】击败 Strassen 算法的算法【英文标题】:Algorithm to beat Strassen's Algorithm 【发布时间】:2016-10-02 23:12:42 【问题描述】:

Caesar 教授希望开发一种矩阵乘法算法 渐近地比 Strassen 的算法快。他的算法将使用分治法,将每个矩阵分成大小为 n/4 x n/4 的块,并且除并合并步骤将花费 Theta(n^2) 时间。

【问题讨论】:

你能证明任何努力解决这个问题吗? @ScottHunter 我在网上找到了这个解决方案,但我不明白。 clrs.skanev.com/04/05/02.html 什么解决方案?我没有看到任何解决方案。 @ScottHunter 我用解决方案的链接更新了我的回复 您能进一步解释这个问题吗?您是否要求渐近地比 Strassen 的矩阵乘法算法更快的算法的伪代码?该算法是否还应该使用具有需要 theta(n^2) 时间的组合步骤的分而治之?请澄清您的问题。 【参考方案1】:

你并没有具体说明这里的问题是什么,但我想这是为了反驳这个微不足道的算法比 Strassen 运行得更快。

假设您将矩阵划分为每个维度 (n / k) X (n / k) 的块(在您的问题中,k 是 4)。那么每个矩阵会有k2个块,会有k3个块乘法(每个块在第一个矩阵将乘以第二个矩阵中的 k 个块)。因此,复杂度递归为

T(n) = k3 T(n / k) + Θ(n2).

case 1 of the Master theorem,这意味着

T(n) = Θ(nlogk(k3)) = Θ(n3 ).

这和普通的矩阵乘法一样。显然,它没有击败 Strassen。

【讨论】:

"把你的矩阵分成k个块...每个矩阵有k^2个块"? @ScottHunter 非常感谢!那是一个可怕的错字。 不,这是一个绝妙的错字:)

以上是关于击败 Strassen 算法的算法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Strassen 算法将 2 个数字与 n 位相乘的算法

Python 实现中的 Strassen 算法错误

Strassen算法不是最快的吗?

实施 Strassen 矩阵乘法算法的问题

矩阵乘法的Strassen算法及时间复杂度

为啥我的 strassen 算法不适用于 3x3 矩阵?