【发布时间】:2018-10-04 02:17:04
【问题描述】:
这是一个 karatsuba 算法的伪代码:
procedure karatsuba(num1, num2)
if (num1 < 10) or (num2 < 10)
return num1*num2
/* calculates the size of the numbers */
m = max(size_base10(num1), size_base10(num2))
m2 = m/2
/* split the digit sequences about the middle */
high1, low1 = split_at(num1, m2)
high2, low2 = split_at(num2, m2)
/* 3 calls made to numbers approximately half the size */
z0 = karatsuba(low1, low2)
z1 = karatsuba((low1+high1), (low2+high2))
z2 = karatsuba(high1, high2)
return (z2*10^(2*m2)) + ((z1-z2-z0)*10^(m2)) + (z0)
我不明白“在中间分割数字序列”这一步,尤其是在查看了 Karatsuba's algorithm
你能解释一下,我们应该如何分割数字序列?
【问题讨论】:
-
我不明白你卡在哪里了。在每次迭代中,您将中间的数字按文本长度(以 10 为底)进行拆分。例如,六位数字
123456变为123和456。 -
@Prune 例如,第一个数字是 12345678,第二个是 100。然后 m2 = 4。根据代码,我们必须在第 4 位拆分两个数字。但在评论中提到,我们应该在中间分割数字。哪个说法是正确的?