矩阵乘法
问题描述
两个 n×n 的矩阵 A 和 B 相乘,通常算法时间复杂度为 O(n3)。是否存在分治算法可以降低时间复杂度?
问题分析
将 A 和 B 分成 4 个大小为 2n×2n 的子矩阵相乘。
[C11C21C12C22]=[A11A21A12A22][B11B21B12B22]需要计算的子问题包括 8 个小矩阵乘法以及 4 个矩阵加法,时间复杂度为:
T(n)=8T(2n)+Θ(n2)即使如此,计算得到的时间复杂度没有得到改善,仍为 T(n3)。我们可令
M1M2M3M4M5M6M7=A11(B12−B22)=(A11+A12)B22=(A21+A22)B11=A22(B21−B11)=(A11+A22)(B11+B22)=(A12−A22)(B21+B22)=(A11−A21)(B11+B12)于是
C11=M5+M4−M2+M6C12=M1+M2C21=M3+M4C22=M5+M1−M3−M7这样就把 8 个矩阵相乘转变成 7 个矩阵相乘,时间复杂度降低为
T(n)=7T(2n)+Θ(n2)=Θ(nlog27)