【发布时间】:2019-08-09 19:02:35
【问题描述】:
我正在学习算法课程。在涵盖分而治之的过程中,我遇到了施特拉森算法。
那么,问题是我们如何将矩阵与奇数或偶数相乘,而不是 2 的幂?
另外,我们如何将 Strassen 算法应用于不同维度的矩阵(例如将 2X3 矩阵与 3X1 矩阵相乘)?
【问题讨论】:
标签: algorithm matrix-multiplication strassen
我正在学习算法课程。在涵盖分而治之的过程中,我遇到了施特拉森算法。
那么,问题是我们如何将矩阵与奇数或偶数相乘,而不是 2 的幂?
另外,我们如何将 Strassen 算法应用于不同维度的矩阵(例如将 2X3 矩阵与 3X1 矩阵相乘)?
【问题讨论】:
标签: algorithm matrix-multiplication strassen
假设矩阵的度数为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。
【讨论】: