“Fast Integer Multiplication Using Modular Arithmetic”(2008)算法何时比 Schönhage-Strassen 算法更快?

Posted

技术标签:

【中文标题】“Fast Integer Multiplication Using Modular Arithmetic”(2008)算法何时比 Schönhage-Strassen 算法更快?【英文标题】:When is the "Fast Integer Multiplication Using Modular Arithmetic" (2008) algorithm faster than Schönhage-Strassen algorithm? 【发布时间】:2012-05-02 17:01:36 【问题描述】:

来自Wikipedia:

“Anindya De、Chandan Saha、Piyush Kurur 和 Ramprasad Saptharishi[11] 在 2008 年使用模算术给出了类似的算法,实现了相同的运行时间。但是,后一种算法仅比 Schönhage-Strassen 快 ,因为不切实际大量输入。”

我会对这种不切实际的大整数的大小非常感兴趣。

也许有人确实以某种方式实现了这两种算法并且可以做一些基准测试?

谢谢

【问题讨论】:

Fürer 的算法和它的模等效...非常深入的研究课题。没有人真正知道交叉点有多大。而且它可能对硬件和实现细节高度敏感。无论如何,这可能完全无关紧要,因为该交叉点可能远远超出 64 位计算限制。 基本上,交叉点太大以至于需要比 64 位允许的更多内存。而且由于 128 位硬件几乎不存在,因此推测交叉点的确切位置是没有意义的,因为它将对(当前不存在的)硬件的细节极为敏感。即使是大 O 常数的 2 倍也可能意味着交叉点存在几个数量级的差异。 你需要找到 n 使得 log(log n)>c2^(log* n),其中 c 是常数的商。假设 c=100,你得到 n > 2^(2^100),这个数字不适合 64 位硬件。我推测常数会高于 100。 @TeaBee:这并不意味着 Fürer 的实现对于某些可测试的输入实际上更快。也许您对 O 表示法的含义有误解:这两种算法很可能相差数十亿甚至更大的常数因子。 我熟悉 Schönhage-Strassen 和 Fürer 的算法。我已经实现了 Schönhage-Strassen,并且了解 Fürer 算法的工作原理。交叉点非常高,以至于能够保存参数的计算机将大于可观测宇宙的大小。当您的复杂性相差小于对数时,这就是问题所在。即使是 Big-O 常数的微小差异,也需要指数级的大输入大小来补偿。在这种情况下,已知 Fürer 的算法有一个 非常非常非常 大的 Big-O 常数。 【参考方案1】:

Fürer's algorithm 及其等效模块 (DSKS) 是非常深入的研究课题,目前仅作为学术兴趣。没有人真正知道交叉点有多大。而且很可能这无关紧要,因为该交叉点可能远远超出 64 位计算限制

我之前实现过 Schönhage-Strassen,并且了解 Fürer 算法的工作原理。所以我对他们两个都很熟悉。我可以说 Schönhage-Strassen 和 Fürer 算法之间的交叉点非常高,以至于能够保存参数的计算机将大于可观测宇宙的大小。

当您的复杂度相差小于对数时,就会出现问题。 即使是 Big-O 常数的微小差异,也需要指数级大的输入大小来补偿。

在这种情况下,已知 Fürer 的算法有一个非常非常非常很大的 Big-O 常数。

【讨论】:

以上是关于“Fast Integer Multiplication Using Modular Arithmetic”(2008)算法何时比 Schönhage-Strassen 算法更快?的主要内容,如果未能解决你的问题,请参考以下文章