問題介紹:分析演算法的時間複雜性,一般將執行一次加法或乘法的時間當作常數。但如果需要處理的數很大,超過計算機硬體對整數的表示範圍。用浮點數又無法得到精確結果,就需要用特殊的演算法來實現;
設x,y都是n位二進位制整數,計算它們的乘積。若直接對應位相乘進製相加的計算方法,時間複雜度為o(n2)。下面用分治法來設計更有效的演算法;
2.演算法思想:要想改變是將複雜度,應儘量減少乘法次數。將n位二進位制整數x,y分為兩段,每段長為n/2位(假設n是2的冪),如圖
所以,
,這樣寫是為了儘量減少乘法的次數,此時,我們只需計算3次n/2位整數的乘法(ac,bd,(a-b)(d-c)),6次加減法,2次移位。由此得
由分治法主定理容易解得:
大整數乘法
參考 http hi.baidu.com operationsystem blog item 6e45dd1af1acadf3ae51330b.html 在計算機中,長整型 long int 變數的範圍是 2147483648 至 2147483647,因此若用長整型變數做乘法運算,乘積最多不能超過...
大整數乘法
問題描述 by 計算機演算法設計與分析 王曉東 p17 通常,在分析乙個演算法的計算複雜性時,都將加法和乘法運算當作是基本運算來處理,即將執行一次加法或乘法運算所需的計算時間當作乙個僅取決於計算機硬體處理速度的常數。這個假定僅在計算機硬體能對參加運算的整數直接表示和處理時才是合理的。然而,在某些情況...
大整數乘法。
include using namespace std int multi int num1,int size1,int num2,int size2 int size size1 size2 int ret new int size int i 0 for i 0 iret i 0 for i 0...