–《算法导论第三版》第4章 分治策略
Strassen算法的核心思想是令递归树稍微不那么茂盛一点儿, 即只递归进行7次而不是8次 n 2 \frac{n}{2} 2n × n 2 \frac{n}{2} 2n矩阵的乘法。减少一次矩阵乘法带来的代价可能是额外几次 n 2 \frac{n}{2} 2n × n 2 \frac{n}{2} 2n矩阵的加法,但只是常数次 。
假定将A,B和C均分解为4个 n 2 \frac{n}{2} 2n × n 2 \frac{n}{2} 2n的子矩阵:
A = [ A 11 A 12 A 21 A 22 ] , B = [ B 11 B 12 B 21 B 22 ] , C = [ C 11 C 12 C 21 C 22 ] A = \begin{bmatrix} A_{11} & A_{12} \\A_{21} & A_{22} \end{bmatrix}, B = \begin{bmatrix} B_{11} & B_{12} \\B_{21} & B_{22} \end{bmatrix}, C =\begin{bmatrix} C_{11} & C_{12} \\C_{21} & C_{22} \end{bmatrix} A=[A11A21A12A22],B=[B11B21B12B22],C=[C11C21C12C22]
因此可将公式 C = A ⋅ B C = A \cdot B C=A⋅B改写成
[ C 11 C 12 C 21 C 22 ] = [ A 11 A 12 A 21 A 22 ] ⋅ [ B 11 B 12 B 21 B 22 ] \begin{bmatrix} C_{11} & C_{12} \\C_{21} & C_{22} \end{bmatrix} = \begin{bmatrix} A_{11} & A_{12} \\A_{21} & A_{22} \end{bmatrix} \cdot \begin{bmatrix} B_{11} & B_{12} \\B_{21} & B_{22} \end{bmatrix} [C11C21C12C22]=[A11A21A12A22]⋅[B11B21B12B22]
则:
C 11 = A 11 ⋅ B 11 + A 12 ⋅ B 21 C 12 = A 11 ⋅ B 12 + A 22 ⋅ B 21 C 21 = A 21 ⋅ B 11 + A 22 ⋅ B 21 C 22 = A 21 ⋅ B 12 + A 22 ⋅ B 22 C_{11} = A_{11} \cdot B_{11} + A_{12} \cdot B_{21}\\ C_{12} = A_{11} \cdot B_{12} + A_{22} \cdot B_{21}\\ C_{21} = A_{21} \cdot B_{11} + A_{22} \cdot B_{21}\\ C_{22} = A_{21} \cdot B_{12} + A_{22} \cdot B_{22} C11=A11⋅B11+A12⋅B21C12=A11⋅B12+A22⋅B21