步骤描述:
-
将
A
和B
分解为n/2xn/2的子矩阵。时间为O(1)。 -
创建10个n/2 × n/2 的矩阵S1,S2,…,S10:
S 1 = B 12 − B 22 S 2 = A 11 + A 12 S 3 = A 21 + A 22 S 4 = B 21 − B 11 S 5 = A 11 + A 22 S 6 = B 11 + B 22 S 7 = A 12 − A 22 S 8 = B 21 + B 22 S 9 = A 11 − A 21 S 10 = B 11 + B 12 S_1=B_{12}-B_{22} \\ S_2=A_{11}+A_{12} \\ S_3=A_{21}+A_{22} \\ S_4=B_{21}-B_{11} \\ S_5=A_{11}+A_{22} \\ S_6=B_{11}+B_{22} \\ S_7=A_{12}-A_{22} \\ S_8=B_{21}+B_{22} \\ S_9=A_{11}-A_{21} \\ S_{10}=B_{11}+B_{12} \\ S1=B12−B22S2=A11+A12S3=A21+A22S4=B21−B11S5=A11+A22S6=B11+B22S7=A12−A22S8=B21+B22S9=A11−A21S10=B11+B12
时间O(n2) -
递归计算P1,P2,…,P7
P 1 = A 11 ⋅ S 1 P 2 = S 2 ⋅ B 22 P 3 = S 3 ⋅ B 11 P 4 = A 22 ⋅ S 4 P 5 = S 5 ⋅ S 6 P 6 = S 7 ⋅ S 8 P 7 = S 9 ⋅ S 10 P_1=A_{11} \cdot S_1 \\ P_2=S_2 \cdot B_{22} \\ P_3=S_3 \cdot B_{11} \\ P_4=A_{22} \cdot S_4 \\ P_5=S_5 \cdot S_6 \\ P_6=S_7 \cdot S_8 \\ P_7=S_9 \cdot S_{10} \\ P1=A11⋅S1P2=S2⋅B22P3=S3⋅B11P4=A22⋅S4P5=S5⋅S6P6=S7⋅S8P7=S9⋅S10 -
计算出C的子矩阵C11,C12,C21,C22:
C 11 = P 5 + P 4 − P 2 + P 6 C 12 = P 1 + P 2 C 21 = P 3 + P 4 C 22 = P 5 + P 1 − P 3 − P 7 C_{11}=P_5+P_4-P_2+P_6 \\ C_{12}=P_1+P_2 \\ C_{21}=P_3+P_4 \\ C_{22}=P_5+P_1-P_3-P_7 C11=P5+P4−P2+P6C12=P1+P2C21=P3+P4C22=P5+P1−P3−P7