分治法--矩阵乘法的Strassen算法
给定两个n*n矩阵
分块进行乘法
-
简单分治:
T(n) = O(n^2)
-
Strassen算法:只需要递归7次,而非8次
(1) 将输入矩阵A、B以及输出矩阵C各分解为4个(n/2)×(n/2)子矩阵。
(2) 创建10个(n/2)×(n/2)矩阵S1,S2,…,S10,如下所示。由于需要进行101次(n/2)×(n/2)矩阵的加减法,所以这一步花费Θ(n2))时间。
(3) 用步骤(1)分解得到的子矩阵和步骤(2)中创建的10个矩阵,递归地计算7个矩阵乘积P1,P2,…,P7
(4) 利用矩阵P1,P2,…,P7进行加减运算,得到输出矩阵C的子矩阵C11,C12,C21,C22这一步需要进行8次(n/2)×(n/2)矩阵的加减法,所以花费时为Θ(n2)