根据N大小,选择哪种算法进行巨大的整数乘法

时间:2015-07-18 11:49:55

标签: algorithm

在我的空闲时间,我正在准备面试问题,例如:实现乘以数字数组的数字。显然,我不得不用PythonJava这样的语言从头开始编写它,所以像“使用GMP”这样的答案是不可接受的(如下所述:Understanding Schönhage-Strassen algorithm (huge integer multiplication))。

对于那两个数字的大小range(即数字位数),我应该选择

  1. 学校成绩算法
  2. Karatsuba算法
  3. TOOM库克
  4. Schönhage-Strassen算法?
  5. Schönhage-Strassen O(n log n log log n)总是一个很好的解决方案吗?维基百科提到Schönhage-Strassen建议超过2^2^152^2^17的数字。当一个数字非常大(例如10,00040,000十进制数字)时,该怎么办,但第二个只包含几个数字?

    所有这4种算法是否容易并行化?

1 个答案:

答案 0 :(得分:1)

您可以浏览GNU多精度算术库的来源,并查看their thresholds for switching between algorithms

更务实的是,您应该只分析算法的实现。 GMP将很多的努力投入到优化中,因此他们的算法将具有与您不同的常数因子。差异可以很容易地将阈值移动一个数量级。随着 代码的输入大小增加,找出时间交叉的位置,并相应地设置阈值。

我认为所有的算法都适合并行化,因为它们主要由分而治之法组成。但请记住,并行化是另一个会使阈值大幅提升的事情。