Skip to content

大整数乘法

问题描述

n 位二进制整数 XY 相乘,通常算法时间复杂度为 O(n2)。是否存在分治算法可以降低时间复杂度?

问题分析

XYn 位整数,将 X 分为 n/2 位的两部分(高 n/2 位的 A 和低 n/2 位的 B),将 Y 分为 n/2 位的两部分(高 n/2 位的 C 和低 n/2 位的 D)。则 X×Y 可以表示为:

XY=(A2n/2+B)(C2n/2+D)=AC2n+(AD+BC)2n/2+BD=AC2n+((A+B)(C+D)ACBD)2n/2+BD

需要计算的子问题包括 ACBD(A+B)(C+D)。其中 (A+B)(C+D) 中的加法运算的时间复杂度取决于问题规模,即数字位数 n。因此可以得到如下递推式:

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

可以解得时间复杂度为:

T(n)=Θ(nlog23)
最近更新