Knuth的线性时间乘法算法为什么不“计数”?


13

维基百科有关乘法算法的页面提到了Donald Knuth的有趣文章。基本上,它涉及将傅立叶变换乘法与对数大小的乘法的预计算表进行组合。它以线性时间运行。

本文的行为就像这种算法,某种程度上不算作“真正的”乘法算法。更重要的是,是否可以在偶数O(n lg n)时间内完成乘法是一个悬而未决的问题!

此算法的哪些细节使它不算作“真实”乘法算法?

我的猜测是:

  • 预先计算表格所花费的时间超过了线性时间。另一方面,它仍然可以及时完成,n lg n因此看起来仍然令人印象深刻。
  • 某种程度上不允许随机访问。但是,为什么其他算法可以使用哈希表和指针之类的东西呢?
  • 当您增加机器的字长时,它会以某种方式缩放错误,例如,如果您有一台256位机器在一条指令中执行256位乘法,那么直到您拥有2 ^ 256个以上的元素,该算法才有意义。另一方面,我们在联合发现中担心逆阿克曼因子。
  • “有没有线性时间乘法算法?” 问题是用一些功能较弱的机器暗中进行的,但这只能得到提示。

Answers:


16

O(logn)nO(nlognloglogn)

CCΩ(nlogn)Ω(nlogn)

有关对大整数进行实际乘法的“正确”模型的讨论,请参阅Fürer的最新论文。他的结论支持“实用的” Schönhage–Strassen算法(其中有两种,另一种具有更高的位复杂度,但在实践中却表现较差;Fürer在本文中解决了此问题)。


2
感谢您的澄清。我没有TAOCP的副本,所以我所要做的就是Wiki文章中的内容(我看到您已经对其进行了编辑以解决此问题)。
Craig Gidney 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.