如何在一系列数字上比较各种乘法算法
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找到它
【讨论】:
以上是关于如何在一系列数字上比较各种乘法算法的主要内容,如果未能解决你的问题,请参考以下文章
K-NN 算法如何在 rapidminer 中以相同的距离工作?