主題
Search

Karatsuba 乘法


執行 大數乘法,可以使用比通常的蠻力“長乘法”技術更少(很多)操作的方法。正如 Karatsuba (Karatsuba 和 Ofman 1962) 發現的那樣,兩個 n- 數字的乘法 可以透過小於 n^2位複雜度 來完成,使用 以下形式 的恆等式

 (a+b·10^n)(c+d·10^n)=ac+[(a+b)(c+d)-ac-bd]10^n+bd·10^(2n).
(1)

遞迴地進行下去,則得到 位複雜度 O(n^(lg3)),其中 lg3=1.58...<2 (Borwein et al. 1989)。已知的最佳界限是 O(nlgnlglgn) 步,對於 n>>1 (Schönhage 和 Strassen 1971, Knuth 1998)。然而,這個 演算法 難以實現,但是基於 快速傅立葉變換 的程式很容易實現,並且給出了 位複雜度 O((lgn)^(2+epsilon)n) (Brigham 1974, Borodin 和 Munro 1975, Borwein et al. 1989, Knuth 1998)。

作為一個具體的例子,考慮在基數 w 中,兩個都只有兩位“數字”長的數字的乘法

N_1=a_0+a_1w
(2)
N_2=b_0+b_1w,
(3)

那麼它們的乘積

P=N_1N_2
(4)
=a_0b_0+(a_0b_1+a_1b_0)w+a_1b_1w^2
(5)
=p_0+p_1w+p_2w^2.
(6)

與其評估各個數字的乘積,現在寫成

q_0=a_0b_0
(7)
q_1=(a_0+a_1)(b_0+b_1)
(8)
q_2=a_1b_1.
(9)

關鍵項是 q_1,它可以展開、重新分組,並用 p_j 表示為

 q_1=p_1+p_0+p_2.
(10)

然而,由於 p_0=q_0p_2=q_2,立即得出

p_0=q_0
(11)
p_1=q_1-q_0-q_2
(12)
p_2=q_2,
(13)

因此,p 的三個“數字”已使用三次乘法而不是四次乘法進行評估。該技術可以推廣到多位數字,但權衡是需要更多的加法和減法。

現在考慮四位“數字”的數字

 N_1=a_0+a_1w+a_2w^2+a_3w^3,
(14)

它可以寫成以基數 w^2 表示的兩位“數字”的數字,

 N_1=(a_0+a_1w)+(a_2+a_3w)w^2.
(15)

新基數中的“數字”現在是

a_0^'=a_0+a_1w
(16)
a_1^'=a_2+a_3w,
(17)

並且 Karatsuba 演算法可以應用於這種形式的 N_1N_2。因此,Karatsuba 演算法不限於乘以兩位數,而更一般地將兩個數字的乘法表示為大小減半的數字的乘法。演算法透過遞迴應用於較小的所需子產品所獲得的漸近速度是 O(n^(lg3)) (Knuth 1998)。

當此技術遞迴應用於多位數字時,在遞迴中會達到一個點,此時加法和減法的開銷使得使用通常的 O(n^2) 乘法 演算法來評估部分乘積更有效。因此,最有效的總體方法依賴於 Karatsuba 和傳統乘法的組合。


另請參閱

複數乘法, 乘法, Strassen 公式

使用 探索

參考文獻

Bernstein, D. J. "快速乘法及其應用。" 即將發表於 Alg. Number Th. http://cr.yp.to/lineartime/multapps-20041007.pdf.Borodin, A. 和 Munro, I. 代數和數值問題的計算複雜性。 New York: American Elsevier, 1975.Borwein, J. M.; Borwein, P. B.; 和 Bailey, D. H. "拉馬努金、模方程以及 Pi 的近似值,或如何計算 Pi 的十億位數字。" Amer. Math. Monthly 96, 201-219, 1989.Brigham, E. O. 快速傅立葉變換。 Englewood Cliffs, NJ: Prentice-Hall, 1974.Brigham, E. O. 快速傅立葉變換及其應用。 Englewood Cliffs, NJ: Prentice-Hall, 1988.Cook, S. A. 函式的最小計算時間。 博士論文。 Cambridge, MA: Harvard University, pp. 51-77, 1966.Hollerbach, U. "超大數的快速乘法和除法。" sci.math.research 帖子, Jan. 23, 1996.Karatsuba, A. 和 Ofman, Yu. "自動計算機的多位數字乘法。" Doklady Akad. Nauk SSSR 145, 293-294, 1962. 翻譯於 Physics-Doklady 7, 595-596, 1963.Knuth, D. E. 計算機程式設計藝術,第 2 卷:半數值演算法,第 3 版。 Reading, MA: Addison-Wesley, pp. 278-286, 1998.Schönhage, A. 和 Strassen, V. "大數的快速乘法。" Computing 7, 281-292, 1971.Toom, A. L. "模擬整數乘法的功能元件方案的複雜性。" Dokl. Akad. Nauk SSSR 150, 496-498, 1963. 英文翻譯於 Soviet Mathematics 3, 714-716, 1963.Zuras, D. "關於大整數的平方和乘法的更多資訊。" IEEE Trans. Comput. 43, 899-908, 1994.

在 中被引用

Karatsuba 乘法

請引用為

Weisstein, Eric W. "Karatsuba 乘法。" 來自 ——一個 資源。 https://mathworld.tw/KaratsubaMultiplication.html

主題分類