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

Posted

技术标签:

【中文标题】如何在一系列数字上比较各种乘法算法【英文标题】:How to compare various multiplication algorithms over a range of numbers 【发布时间】:2020-09-03 15:00:12 【问题描述】:

在阅读 MITOpencourseware 中的 MIT 讲座(6.006 第 12 课)时,我偶然发现了 4 种乘法算法(将两个 n 位数字相乘)-

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

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

为了尝试这一点,我参考了以下链接中的 gmpy2 包文档 - https://gmpy2.readthedocs.io/en/latest/intro.html

然而,在浏览本文档的部分内容时,gmpy2 似乎更多地是处理大量数字。特别是,我没有找到实现上述 4 种算法的单独函数。那么 gmpy2 中是否有任何部分实现了这些算法,以便我可以根据 n(位数)绘制这些算法的运行时间?

【问题讨论】:

【参考方案1】:

我是gmpy2的维护者。

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

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

很容易修改代码并添加全局变量来统计每个步骤的执行次数。

可以在DecInt找到它

【讨论】:

以上是关于如何在一系列数字上比较各种乘法算法的主要内容,如果未能解决你的问题,请参考以下文章

了解快速排序算法如何在 VBA 中重现

K-NN 算法如何在 rapidminer 中以相同的距离工作?

如何确定我的pi计算是否准确?

Excel SUMIFS 在一系列数字上,这些数字被格式化为字符串

遗传算法如何在不知道搜索量的情况下优化神经网络的权重?

题解:2018级算法第四次上机 C4-最小乘法