【发布时间】:2016-04-08 13:03:33
【问题描述】:
乘法算法用于将两个 r 基数相乘:
0 <= x,y < r^n
x = x1 * r^(n/2) + x0
y = y1 * r^(n/2) + y0
其中x0 是x 中包含最低有效数字的一半,x1 是最高有效数字的一半,y 也是如此。
所以如果r = 10 和n = 4,我们就有x = 9723 = 97 * 10^2 + 23,其中x1 = 97 and x0 = 23。
乘法可以这样完成:
z = x*y = x1*y1 + (x0*y1 + x1*y0) + x0*y0
所以我们现在有四个半数的乘法(我们最初有一个 n 位数的乘法,现在我们有四个 n/2 位数的乘法)。
在我看来,这个算法的重复是:
T(n) = O(1) + 4*T(n/2)
但显然是T(n) = O(n) + 3T(n/2)
无论如何,解决方案是T(n) = O(n^2),我可以看到这一点,但我想知道为什么有一个 O(n) 项而不是一个 O(1) 项?
【问题讨论】:
-
它看起来很像 Karatsuba (en.wikipedia.org/wiki/Karatsuba_algorithm)。我现在在火车上,即将失去互联网连接;如果问题要在两个小时内打开,我会解决的。 :)
标签: algorithm