请设计一个有效的算法,可以进行两个n位大整数的乘法运算
小学的方法:O(n2)
效率太低 X=
Y=
X = a 2n/2+ b Y = c 2n/2+ d
XY = ac 2n+ (ad+bc)2n/2 + bd
为了降低时间复杂度,必须减少乘法的次数。
1.XY=
ac 2n + ((
a–
c)(
b–
d)+
ac+
bd) 2n/2 +
bd 2.XY=
ac 2n + ((
a+
c)(
b+
d)-
ac–
bd) 2n/2 +
bd
如果将大整数分成更多段,用更复杂的方式把它们组合起来,将有可能得到更优的算法。
最终的,这个思想导致了快速傅利叶变换(Fast Fourier Transform)的产生。该方法也可以看作是一个复杂的分治算法。