大整數乘法思想及其分析

2021-10-12 07:41:46 字數 956 閱讀 8884

xy都是n位二進位制整數,現在要計算它們的乘積xy

提供三種方法計算xy

模擬我們日常所做的豎式乘法

時間複雜度為o(n2)

我們採用分治的思想,將 n 位二進位制整數的 x 和 y 都分成2段,每段的長為n/2

由此可以得到

這樣就把規模為n的原問題,轉換成了4個規模為n/2的子問題,在這個問題中進行4次n/2位整數的乘法,3次不超過2n位的整數加法,以及兩次移位(分別對應式子中乘2n和乘2n/2)

因此設t(n)是2個n位整數相乘所需的運算總數,則有

時間複雜度t(n) = o(n2),可以看到這種演算法並沒有將時間複雜度降低,並不比豎式乘法更有效

這裡我們考慮降低分治演算法中子問題的個數,從而降低演算法的時間複雜度

原來的子問題中需要計算(ac、ad、bc、bd)這4個子問題的解

下面將xy寫成另一種形式

在這種形式中,子問題的個數減少到了3個(ac、bd、(a - b)(d - c))

這時的t(n)表示式為

時間複雜度為t(n) = o(n1.59)

大整數乘法

參考 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...