普通方法
C11 =A11*B11+A12*B21
C12=。。
C21=。。。
C22=。。。
此递归公式为T(n)=8T(n/2)+O(n^2) 时间复杂度为O(n^3)
Strassen方法的递推公式为:

T(n) = O(nlog 7) = O(n2.81).
时间复杂度就马上降下来了。。但是不要过于乐观。
从实用的观点看,Strassen算法通常不是矩阵乘法所选择的方法:
1 在Strassen算法的运行时间中,隐含的常数因子比简单的O(n^3)方法常数因子大
2 当矩阵是稀疏的时候,为稀疏矩阵设计的算法更快
3 Strassen算法不像简单方法那样子具有数值稳定性
4 在递归层次中生成的子矩阵要消耗空间。
所以矩阵乘法一般意义上还是选择的是朴素的方法,只有当矩阵变稠密,而且矩阵的阶数>20左右,才会考虑使用Strassen算法。
本文介绍了两种矩阵乘法算法:普通方法和Strassen方法。普通方法的时间复杂度为O(n^3),而Strassen方法通过递归分解矩阵降低时间复杂度至O(n^2.81)。然而,Strassen方法在实际应用中受到限制,如较大的隐含常数因子、不适合稀疏矩阵等。
1万+

被折叠的 条评论
为什么被折叠?



