如何使用施特拉森算法将除 2 次方以外的度数矩阵相乘?
Posted
技术标签:
【中文标题】如何使用施特拉森算法将除 2 次方以外的度数矩阵相乘?【英文标题】:How to multiply matrices of degree other than powers of 2, using Strassen's Algorithm? 【发布时间】:2019-08-09 19:02:35 【问题描述】:我正在学习算法课程。在涵盖分而治之的过程中,我遇到了施特拉森算法。
那么,问题是我们如何将矩阵与奇数或偶数相乘,而不是 2 的幂?
另外,我们如何将 Strassen 算法应用于不同维度的矩阵(例如将 2X3 矩阵与 3X1 矩阵相乘)?
【问题讨论】:
你读过en.wikipedia.org/wiki/…吗? 【参考方案1】:假设矩阵的度数为n
。如果你想将A
和B
相乘,你可以做的一个简单的事情是用零填充A
和B
(比如A_pad
,B_pad
,这样它们就变得暗淡(k,k)
,其中k
是上限n
的最小幂。由于k
最多是原始尺寸的两倍,
k^log_2(7)<=3 * N^log_2(7)
所以算法还是O(N^log_2(7))
。
在一个矩阵很“薄”(比如 A 的长度支配 A 的高度)的情况下,这种方法不太适用于不同维度的矩阵。在这种情况下,您需要对矩阵进行切片以获得更像正方形的矩阵,正如@neil-edelman 的评论所述。确定薄度的方法可能是查看BND>dim(A)[1]/dim(A)[0]>bnd
是否是bnd
和BND
是预先选择的一些常数参数,接近1。
【讨论】:
以上是关于如何使用施特拉森算法将除 2 次方以外的度数矩阵相乘?的主要内容,如果未能解决你的问题,请参考以下文章
AlphaTensor横空出世!打破矩阵乘法计算速度50年纪录,DeepMind新研究再刷Nature封面,详细算法已开源...