1. 程式人生 > >分治-大整數乘法

分治-大整數乘法

請設計一個有效的演算法,可以進行兩個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)的產生。該方法也可以看作是一個複雜的分治演算法。