矩阵乘法
矩阵乘法
假设A和B为n阶矩阵(),计算时,对于C中个元素,每个元素都需要做n次乘法,因此。
利用简单的分治策略,可以将矩阵分块计算。
其中,
这样就把原问题转换为了8个子问题,递推方程为:
求解得到:
简单的分治算法并不能降低时间复杂度的阶,但是矩阵乘法可以通过减少子问题的个数进行优化。
知识测验
题目
分块矩阵乘积的C₁₂应该是哪一个?
Strassen矩阵乘法
让分别对应矩阵乘法的7个子问题:
利用这些中间矩阵,可以得到结果矩阵:
在这些运算中,一共有7个子问题和18次矩阵加减法,时间复杂度为:
求解得到:
Coppersmith-Winograd算法曾将矩阵乘法的时间复杂度上界改进到,后续研究进一步改进了这一上界。矩阵乘法可以应用在科学计算、图形处理、数据挖掘等方面,在回归、聚类、主成分分析、决策树等挖掘算法中常常涉及大规模矩阵运算。
互动实验
Strassen:计算七个乘积,再组合矩阵
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
Strassen为什么能降低渐近复杂度?
知识测验
题目
能否把M₁=A₁₁(B₁₂−B₂₂)写成(B₁₂−B₂₂)A₁₁?
动手练习
手算七个中间乘积
给定A=[[2,1],[3,4]],B=[[5,2],[1,3]]。用正文的Strassen公式计算AB,在纸上写出过程,不交换矩阵乘法的顺序。
- 逐项计算M₁至M₇。
- 用中间结果组合C₁₁、C₁₂、C₂₁、C₂₂。
- 用普通矩阵乘法核对答案,并比较乘法次数。