1. 程式人生 > >演算法實現(5)大整數乘法

演算法實現(5)大整數乘法

通常,在分析演算法的計算複雜性時,都將加法和乘法運算當作基本運算來處理,即將執行一次加法或乘法運算所需的計算時間當作一個僅取決於計算機硬體處理速度的常數。這個假定僅在參加運算的整數能在計算機硬體對整數的表示範圍內直接處理時才是合理的。然而,在某些情況下,需要處理很大的整數,它無法再計算機硬體能直接表示的整數範圍內進行處理。若用浮點數來表示它,則只能近似的表示它的大小,計算結果中的有效數字也受到限制。若要精確的表示大整數並在計算結果中要求精確的得到所有位數上的數字,就必須用軟體的方法來實現大整數的算術運算。

設X和Y都是n位二進位制整數,現在要計算它們的乘積XY。可以用小學所學的方法來設計一個計算機乘積XY的演算法,但是這樣做計算步驟太多,效率較低。如果將每兩個一位數的乘法或加法看作一步運算,那麼這種方法要進行O(n平方)步運算才能求出乘積XY。下面用分治法來設計更加有效的大整數乘法演算法。

將n位二進位制整數X和Y都分為2段,每段的長為n/2位。

如下是主要的虛擬碼的實現:


此式看起來似乎更復雜性,必須減少乘法次數。

上述二進位制大整數乘法同樣可應用於十進位制大整數的乘法以減少乘法次數,提高演算法效率。