矩阵Strassen 算法

Strassen 算法

不要与多项式乘法的 Schönhage-Strassen 算法混淆。

在线性代数中,以 Volker Strassen 命名的 Strassen 算法是一种矩阵乘法算法。对于大型矩阵,它比标准矩阵乘法算法更快,具有更好的渐近复杂度,尽管朴素算法通常更适合较小的矩阵。对于极大矩阵,Strassen 算法比已知最快的算法慢,但这种银河算法在实践中没有用,因为它们对于实际大小的矩阵要慢得多。对于小矩阵,存在更快的算法。

Strassen 算法适用于任何环,例如加/乘,但不适用于所有半环,例如最小加或布尔代数,其中朴素算法仍然有效,以及所谓的组合矩阵乘法。

历史

Volker Strassen 在 1969 年首次发布了这个算法,从而证明了n3通用矩阵乘法算法不是最佳的。Strassen 算法的发布导致了对矩阵乘法的更多研究,这导致了渐近下界和改进的计算上限。

算法

让AB是环上的两个方形矩阵R,例如,其项为整数或实数的矩阵。矩阵乘法的目标是计算矩阵乘积C=AB。以下算法说明假定所有这些矩阵的大小都是 2 的幂

但这只是概念上必要的 --- 如果矩阵A,B不是类型2nX2n,"缺失的"行和列可以用零填充以获得大小为 2 的幂的矩阵 --- 尽管该算法的实际实现在实践中不会这样做。

Strassen 算法分区A,B和C转换为大小相等的块矩阵

。朴素的算法为:

这种构造不会减少乘法的次数:仍然需要 8 次矩阵块的乘法来计算Cij矩阵,则使用标准矩阵乘法时所需的乘法次数相同。

Strassen 算法定义了新值:

仅使用 7 次乘法(每次 1 次Mk) 而不是 8。我们现在可以将Cij在Mk:

我们递归迭代这个除法过程,直到子矩阵退化为数字(环的元素R). 如上所述,如果原始矩阵的大小不是 2 的幂,则生成的乘积将具有零行和零列,就像A和B,然后这些将在此时被剥离以获得(更小的)矩阵C我们真的很想要。

Strassen 算法的实际实现对于足够小的子矩阵切换到标准的矩阵乘法方法,这些算法的效率更高。Strassen 算法更有效的特定交叉点取决于特定的实现和硬件。早期的作者估计,Strassen 算法对于宽度为 32 到 128 的矩阵,可以优化实现。然而,据观察,这个交叉点近年来一直在增加,2010 年的一项研究发现,与高度优化的传统乘法相比,即使是 Strassen 算法的单个步骤在当前架构上通常也没有好处,直到矩阵大小超过 1000 或更多,即使对于几千个矩阵大小,好处通常充其量也是微不足道的(大约 10% 或更少)。最近的一项研究(2016 年)观察到,小至 512 的矩阵有好处,好处约为 20%。

对 Strassen 算法的改进

更多信息:矩阵乘法算法 § 次三次算法和矩阵乘法的计算复杂性

通过使用 Winograd 在 1971 年发现的以下形式,可以减少矩阵添加的数量:

这会将矩阵加法和减法的数量从 18 个减少到 15 个。矩阵乘法的个数仍然是 7,渐近复杂度是相同的。

该算法在 2017 年进一步优化, 将每步的矩阵加法次数减少到 12 次,同时保持矩阵乘法的次数,并在 2023 年再次优化:


最后推荐:一个GPU矩阵乘法运算工具-GPUMatrix1.26【Windows版本】
https://download.csdn.net/download/axecute/90266772

相关推荐
Eward-an15 小时前
LeetCode 1980 题通关指南|3种解法拆解“找唯一未出现二进制串”问题,附Python最优解实现
python·算法·leetcode
程序员酥皮蛋15 小时前
hot 100 第四十题 40.二叉树的层序遍历
数据结构·算法·leetcode
木斯佳16 小时前
HarmonyOS 6实战:从爆款vlog探究鸿蒙智能体提取关键帧算法
算法·华为·harmonyos
Mr.朱鹏17 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
WJSKad123517 小时前
【DepthPro】实战教程:单目深度估计算法详解与应用
算法
wzqllwy17 小时前
8 大经典排序算法(Java 实现):原理 + Demo + 核心分析
java·算法·排序算法
We་ct17 小时前
LeetCode 77. 组合:DFS回溯+剪枝,高效求解组合问题
开发语言·前端·算法·leetcode·typescript·深度优先·剪枝
重生之我是Java开发战士17 小时前
【递归、搜索与回溯】二叉树中的深度优先搜索:布尔二叉树,求根节点到叶节点数字之和,二叉树剪枝,验证二叉搜索树,第K小的元素,二叉树的所有路径
算法·深度优先·剪枝
篮l球场17 小时前
矩阵置零
算法
lihihi18 小时前
P1650 [ICPC 2004 Shanghai R] 田忌赛马(同洛谷2587)
开发语言·算法·r语言