Algorithm 空手道倍增器

Algorithm 空手道倍增器,algorithm,recursion,multiplication,Algorithm,Recursion,Multiplication,我将两个n位正整数乘以一个n位的Karatsuba乘法器。但大多数时候,子问题仍然需要处理两个n位数的数字。那么,我应该再次递归地使用n位数的Karatsuba算法来解决子问题吗?这种方法是否有冗余?它会以任何方式影响计算时间(O(n^1.5))吗?是的,您必须使用相同的方法。对于足够小的数字,请使用其他方法,因为添加数字的开销可能太大 但这不是真的,你需要再次乘以n位数,你需要乘以n/2位数。这就是这个方法的全部要点。这里有些东西听起来不对劲;在Karatsuba乘法过程中,您不应该返回n位数

我将两个n位正整数乘以一个n位的Karatsuba乘法器。但大多数时候,子问题仍然需要处理两个n位数的数字。那么,我应该再次递归地使用n位数的Karatsuba算法来解决子问题吗?这种方法是否有冗余?它会以任何方式影响计算时间(O(n^1.5))吗?

是的,您必须使用相同的方法。对于足够小的数字,请使用其他方法,因为添加数字的开销可能太大


但这不是真的,你需要再次乘以n位数,你需要乘以
n/2
位数。这就是这个方法的全部要点。

这里有些东西听起来不对劲;在Karatsuba乘法过程中,您不应该返回n位数字。你能发布你的代码或伪代码让我们看一下吗?Karasuba缩减将一个nxn乘积减少为三个N/2xn/2乘积。这就是
O(N^1.585)
的来源。有一个阈值,您应该切换回
O(N^2)
multiply。请发布cod并向我们展示您的尝试。让我们将49 x 56(两个两位数)相乘a=4 x 5 d=9 x 6 e=(4+9)x(5+6)-a-d=>e=13 x 11-a-d,我们可以看到,我们需要再次将13和11相乘,它们同样是两个两位数。那么,我是否应该再次对它们应用两位数的Karatsuba乘数呢?我不认为小位数是一个很好的例子。每次迭代的位数为n/2,但可能会添加一个常量(在这种情况下为1)。这就是为什么我说对于小数字,不同的方法效果更好。由于添加两个n/2数字可能会导致结转,因此位数可能会随着1的增加而增加,在这种情况下就是这样。