在我的空闲时间,我正在准备面试问题,例如:实现乘以数字数组的数字。显然,我不得不用Python
或Java
这样的语言从头开始编写它,所以像“使用GMP”这样的答案是不可接受的(如下所述:Understanding Schönhage-Strassen algorithm (huge integer multiplication))。
对于那两个数字的大小range
(即数字位数),我应该选择
Schönhage-Strassen O(n log n log log n)
总是一个很好的解决方案吗?维基百科提到Schönhage-Strassen建议超过2^2^15
到2^2^17
的数字。当一个数字非常大(例如10,000
到40,000
十进制数字)时,该怎么办,但第二个只包含几个数字?
所有这4种算法是否容易并行化?
答案 0 :(得分:1)
您可以浏览GNU多精度算术库的来源,并查看their thresholds for switching between algorithms。
更务实的是,您应该只分析算法的实现。 GMP将很多的努力投入到优化中,因此他们的算法将具有与您不同的常数因子。差异可以很容易地将阈值移动一个数量级。随着 代码的输入大小增加,找出时间交叉的位置,并相应地设置阈值。
我认为所有的算法都适合并行化,因为它们主要由分而治之法组成。但请记住,并行化是另一个会使阈值大幅提升的事情。