大整数乘法
问题描述
n 位二进制整数 X 和 Y 相乘,通常算法时间复杂度为 O(n2)。是否存在分治算法可以降低时间复杂度?
问题分析
设 X 和 Y 是 n 位整数,将 X 分为 n/2 位的两部分(高 n/2 位的 A 和低 n/2 位的 B),将 Y 分为 n/2 位的两部分(高 n/2 位的 C 和低 n/2 位的 D)。则 X×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需要计算的子问题包括 AC、BD、(A+B)(C+D)。其中 (A+B)(C+D) 中的加法运算的时间复杂度取决于问题规模,即数字位数 n。因此可以得到如下递推式:
T(n)=3T(2n)+Θ(n)可以解得时间复杂度为:
T(n)=Θ(nlog23)