algorithm - 如何使用施特拉森算法将除 2 次方以外的度数矩阵相乘?
问题描述
我正在学习算法课程。在谈到分而治之时,我遇到了施特拉森算法。
所以,问题是我们如何乘以奇数度的矩阵,或者不是 2 的幂的偶数度数?
此外,我们如何将 Strassen 算法应用于不同维度的矩阵(例如将 2X3 矩阵与 3X1 矩阵相乘)?
解决方案
说矩阵是 degree n
。如果你想相乘A
,你可以做一件简单的事情,就是用零B
填充A
和(比如,这样它们是暗淡的,其中2 的最小幂是上限。因为最多是原始尺寸的两倍,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。
推荐阅读
- android - 我想水平绘制带有顶部位置提示的按钮
- php - 尝试创建论坛寻呼机并同时订购结果
- c++ - 将二维数组传递给函数
- python - 将录制的音频从浏览器保存到 Python API 作为 WAV 文件
- unity3d - 将搅拌机中创建的资产导入 Unity 的问题
- python - BeautifulSoup soup.select 切断子标签
- apache-kafka - Akka-stream-kafka 消费者组中增加消费者触发重新平衡,由于撤销分区而导致 CommitFailedException
- python - 如何在 mac 上将 pyobjc 和 Foundation 安装到 virtualenv 中?
- amazon-web-services - 必须使用 CNAME 记录将域名与 RDS 数据库实例关联吗?
- c++ - 设置 MySQL C++ 连接器以正确接收西里尔字符