算法系列:大整數的乘法


通常,在分析算法的計算復雜性時,都將加法和乘法運算當做基本運算來處理,即將執行一次加法或乘法運算所需的計算時間當做一個僅取決於計算機硬件處理速度的常數。然而,當需要精確地表示大整數並在計算結果中要求精確地得到所有位數上的數字,就必須用軟件的方法來實現大整數的算法運算。下面就來學習一下如何使用算法來計算大整數的乘法。
設X和Y都是n位二進制整數,現在要求計算它們的乘積XY。算法的基本思想如下:
將n位二進制整數X和Y都分為2段,每段長為n/2(為了敘述簡單,假設n是2的冪),由此可以得到
X = A2n/2 + B
Y = C2n/2 + D
XY = (A2n/2 + B)(C2n/2 + D) = AC2+ (AD + BC)2n/2 + BD

如果按此式計算,則必須進行4次n/2位整數的乘法(AC,AD,BC和BD),以及3此不超過2n位的整數加法(分別對應於式中的加號),此外還有2此移位(分別對應於乘2n和2n/2)。所有這些加法和移位公用O(n)步運算,則整個式子需要的運算總數為

T(n) = 4T(n/2) + O(n)   n > 1

由此可以得到T(n) = O(n2),所以還是比較復雜的,下面把XY寫成另一種形式:

XY = AC2n + ((A - B)(D - C) + AC + BD)2n/2 + BD

此式做了3此n/2位整數的乘法,6次加,減法和2次移位,由此可得

T(n) = 3T(n/2) + O(n)   n > 1

容易解得T(n) = O(nlog3) = O(n1.59)

 上述二進制大整數乘法同樣可應用於十進制大整數的乘法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM