矩阵乘法

问题描述

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

问题分析

AABB 分成 44 个大小为 n2×n2\frac{n}{2} \times \frac{n}{2} 的子矩阵相乘。

[C11C12C21C22]=[A11A12A21A22][B11B12B21B22] \begin{array}{l} {\left[\begin{array}{ll} C_{11} & C_{12} \\ C_{21} & C_{22} \end{array}\right]=\left[\begin{array}{ll} A_{11} & A_{12} \\ A_{21} & A_{22} \end{array}\right]\left[\begin{array}{ll} B_{11} & B_{12} \\ B_{21} & B_{22} \end{array}\right]} \end{array}

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

T(n)=8T(n2)+Θ(n2) \begin{aligned} T(n) = 8 T\left( \frac{n}{2} \right) + \Theta(n^2) \end{aligned}

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

于是

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

\begin{aligned} T(n) &= 7 T\left( \frac{n}{2} \right) + \Theta(n^2) \ &= \Theta\left(n^{\log _{2}{7}}\right) \end{aligned}