算法分析与设计 分治算法 大整数乘法 大整数乘法 问题描述 nnn 位二进制整数 XXX 和 YYY 相乘,通常算法时间复杂度为 O(n2)O(n^2)O(n2)。是否存在分治算法可以降低时间复杂度? 问题分析 设 XXX 和 YYY 是 nnn 位整数,将 XXX 分为 n/2n/2n/2 位的两部分(高 n/2n/2n/2 位的 AAA 和低 n/2n/2n/2 位的 BBB),将 YYY 分为 n/2n/2n/2 位的两部分(高 n/2n/2n/2 位的 CCC 和低 n/2n/2n/2 位的 DDD)。则 X×YX \times YX×Y 可以表示为: XY=(A⋅2n/2+B)(C⋅2n/2+D)=AC⋅2n+(AD+BC)⋅2n/2+BD=AC⋅2n+((A+B)(C+D)−AC−BD)⋅2n/2+BD \begin{aligned} XY &= (A \cdot 2^{n/2} + B)(C \cdot 2^{n/2} + D) \\ &= AC \cdot 2^n + (AD + BC) \cdot 2^{n/2} + BD \\ &= AC \cdot 2^n + ((A+B)(C+D) - AC - BD) \cdot 2^{n/2} + BD \end{aligned} XY=(A⋅2n/2+B)(C⋅2n/2+D)=AC⋅2n+(AD+BC)⋅2n/2+BD=AC⋅2n+((A+B)(C+D)−AC−BD)⋅2n/2+BD需要计算的子问题包括 ACACAC、BDBDBD、(A+B)(C+D)(A+B)(C+D)(A+B)(C+D)。其中 (A+B)(C+D)(A+B)(C+D)(A+B)(C+D) 中的加法运算的时间复杂度取决于问题规模,即数字位数 nnn。因此可以得到如下递推式: T(n)=3T(n2)+Θ(n) \begin{aligned} T(n) = 3 T\left( \dfrac{n}{2} \right) + \Theta(n) \end{aligned} T(n)=3T(2n)+Θ(n)可以解得时间复杂度为: T(n)=Θ(nlog23) \begin{aligned} T(n) = \Theta\left(n^{\log _{2}{3}}\right) \end{aligned} T(n)=Θ(nlog23) 矩阵乘法