如何比较一系列数字的各种乘法算法

How to compare various multiplication algorithms over a range of numbers

在 MITOpencourseware(6.006 第 12 课)中进行麻省理工学院讲座时,我提到了 4 种乘法算法(将两个 n 位数相乘)-

  1. 复杂度为 O(n^2) 的普通朴素方法
  2. Karatsuba 算法 - O(n^1.584)
  3. Toom-Cook(Toom3) - O(n^1.465)
  4. Schonhage-Strassen - O(nlog(n)log(log(n)))

现在要研究的是在哪些阈值点(即 n 的值),一种方法超越另一种成为更好的算法。提到以上都在gmpy包里。

为了尝试这个,我参考了下面的 gmpy2 包文档 link - https://gmpy2.readthedocs.io/en/latest/intro.html

然而,在浏览本文档的部分内容时,我发现 gmpy2 似乎更适合处理大量数据。特别是我没有找到实现上述 4 种算法的单独函数。那么 gmpy2 是否有实现这些算法的任何部分,所以我可以绘制这些算法的 运行 次与 n(位数)的关系?

我是 gmpy2 的维护者。

gmpy2 不直接实现任何乘法算法。它只是调用 GMP

中实现的算法

很多年前,我写了一个纯粹的 Python 实现 multiple-precision 算术。它使用朴素、Karatsuba、Toom-3、Toom-4 和 Nussbaumer 卷积进行乘法运算。 (有趣的是,如果你选择足够大的精度,一个纯 Python 的解 递归调用 Toom-4、Toom-3、Karatsuba 可以比 Python 中使用并用 C 编写的 Karatsuba 唯一版本更快。)还实现了几种不同的除法算法。

很容易修改代码,增加全局变量统计每一步执行的次数

可以在DecInt

找到