大整數的乘法(遞迴方程 複雜度分析)

2021-10-10 17:23:45 字數 1863 閱讀 6078

背景介紹

設x和y都是n位二進位制整數,現在需要計算它們的乘積xy,如果使用小學的思路設計演算法,那麼需要n2次乘法和n-1次加法,效率太低,那麼能夠設計出一種演算法能夠提高效率?

方案一將n位二進位制整數x和y都分為兩段,每段的長度為n/2,如下圖所示

此時,x=a

2n/2

+bx=a2^+b

x=a2n/

2+b,y=c

2n/2

+dy=c2^+d

y=c2n/

2+d,xy的乘積就為:

x y=

(a2n

/2+b

)(c2

n/2+

d)=a

c2n+

(ad+

bc)2

n/2+

bdxy=(a2^+b)(c2^+d)=ac2^n+(ad+bc)2^+bd

xy=(a2

n/2+

b)(c

2n/2

+d)=

ac2n

+(ad

+bc)

2n/2

+bd,共需要4次2n/2位的乘法,3次長度不超過2n的加法,以及兩次移位操作,所以可以得出對應遞迴方程如下:

t (n

)=o(1)\quad\quad\quad\quad\quad\quad\quad\\ 4t(n/2)+o(n)\quad\quad \end

t(n)

=)^+c_ko(n)\\ =(2^)^+c_ko(n)\\ =o(n^)+c_ko(n)\\ =o(n^)\\ =o(n^2)

t(n)=4

kt(n

/2k)

+ck​

o(n)

=4kt

(1)+

ck​o

(n)=

(2lo

g2​4

)log

2​n+

ck​o

(n)=

(2lo

g2​n

)log

2​4+

ck​o

(n)=

o(nl

og2​

4)+c

k​o(

n)=o

(nlo

g2​4

)=o(

n2)注:這裡係數是4,求完相應對數後,結果為2,寫的麻煩是為了當係數為3時,同學們也能理解清楚計算的過程。

方案二x y=

ac2n

+((a

−b)(

d−c)

+ac+

bd)2

n/2+

bdxy=ac2^n+((a-b)(d-c)+ac+bd)2^+bd

xy=ac2

n+((

a−b)

(d−c

)+ac

+bd)

2n/2

+bd,看上去算式更複雜,但僅需3次n/2位整數的乘法,6次加、減法和2次移位。於是可得出遞迴方程如下:

t (n

)=o(1)\quad\quad\quad\quad\quad\quad\quad\\ 3t(n/2)+o(n)\quad\quad \end

t(n)

=)=o(n^)

t(n)=o

(nlo

g2​3

)=o(

n1.5

9),相較於之前的,算是較大的乙個改進。

大整數乘法 分治演算法的時間複雜度

1.1原始的低效演算法 我們將n位 為方便討論簡化問題,我們假設n是2的冪 十進位制整數 二進位制也可以 x y都分為2段,每段的長度是n 2位。如果現在直接用遞迴或分治進行程式設計,其演算法複雜度為 其中 t n 代表規模為n的問題,係數4表示問題縮小到t n 2 時,包含四次乘法 上式中ac a...

矩陣乘法複雜度分析

在很多機器學習或者資料探勘 中,裡面或多或少的涉及到演算法複雜度分析。進一步思考,是如何得到的呢?很長時間裡,我也感受到比較疑惑,閱讀 過程中,在涉及到這部分內容時,會直接跳過演算法複雜度分析這快。其一是因為比較燒腦。雖然知道複雜度分析是對演算法總體上的概況,用來進行演算法間好壞的比較 由此可見,重...

遞迴演算法時間複雜度分析

一般情況下,演算法中基本操作重複的次數就是問題規模n的某個函式f n 進而分析f n 隨n的變化情況並確定t n 的數量級。這裡用 o 來表示數量級,給出演算法時間複雜度。t n o f n 它表示隨問題規模n的增大,演算法的執行時間增長率和f n 增長率成正比,這稱作演算法的漸進時間複雜度。而我們...