1 朴素算法
这个算法就是矩阵乘法的定义:
- 很容易看出这个算法复杂度是 Θ ( n 3 ) \Theta(n^3) Θ(n3)。
2 递归算法
分治法首先是从分割问题开始的,得到数学上的递归关系后,然后使用递归的方式实现。
由上面的数学性质,可以使用递归实现:
- T ( n ) = 8 T ( n / 2 ) + Θ ( n 2 ) T(n)=8T(n/2)+\Theta(n^2) T(n)=8T(n/2)+Θ(n2),应用主定理可知, T ( n ) = Θ ( n 3 ) T(n)=\Theta(n^3) T(n)=Θ(n3),没有什么进步,不过这里分割思路是没有问题的,只不过还有一步技巧性较强的变换在里面。
3 Strassen’s algorithm for matrix multiplication
1969年,斯特拉森(V.Strassen)利用分治策略并加上数学处理设计出了一种时间复杂度是 O ( n 2.81 ) O(n^{2.81}) O(n