Skip to content

矩阵乘法

问题描述

两个 n×n 的矩阵 AB 相乘,通常算法时间复杂度为 O(n3)。是否存在分治算法可以降低时间复杂度?

问题分析

AB 分成 4 个大小为 n2×n2 的子矩阵相乘。

[C11C12C21C22]=[A11A12A21A22][B11B12B21B22]

需要计算的子问题包括 8 个小矩阵乘法以及 4 个矩阵加法,时间复杂度为:

T(n)=8T(n2)+Θ(n2)

即使如此,计算得到的时间复杂度没有得到改善,仍为 T(n3)。我们可令

M1=A11(B12B22)M2=(A11+A12)B22M3=(A21+A22)B11M4=A22(B21B11)M5=(A11+A22)(B11+B22)M6=(A12A22)(B21+B22)M7=(A11A21)(B11+B12)

于是

C11=M5+M4M2+M6C12=M1+M2C21=M3+M4C22=M5+M1M3M7

这样就把 8 个矩阵相乘转变成 7 个矩阵相乘,时间复杂度降低为

T(n)=7T(n2)+Θ(n2)=Θ(nlog27)
最近更新