主题
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 公式

使用 Wolfram|Alpha 探索

参考文献

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.

在 Wolfram|Alpha 中被引用

Karatsuba 乘法

请引用为

Weisstein, Eric W. "Karatsuba 乘法。" 来自 MathWorld——一个 Wolfram Web 资源。 https://mathworld.net.cn/KaratsubaMultiplication.html

主题分类