【问题标题】:Integer multiplication algorithm using a divide and conquer approach?使用分治法的整数乘法算法?
【发布时间】:2011-08-21 05:03:21
【问题描述】:

作为家庭作业,我应该使用低于 O(n) 的分治法实现 1000 位数字的整数乘法。我应该研究什么算法?

【问题讨论】:

  • 如果 n 是输入的大小,则时间复杂度不能小于 O(n)。那么你甚至无法读取整个输入。
  • 我怀疑 O(n) 指的是伪多项式时间,即他实际上想要比 O(2^n) 更好的东西.许多简单的算法都可以满足这一要求,但您可能会因实现答案中的其中一个而获得额外奖励。
  • 你确定你没有把它误认为 O(n * n) 吗?如果那时,您有 1) Karatsuba 算法,它在 O(n^(log3 / log2)) 中运行,2) FFT 方法在 O(n log n) 中运行(技术上它是 O(n * log^* n))。最简单的代码是 Karatsuba。
  • 问题陈述有误。我已经给我的老师发了邮件,谢谢。

标签: algorithm biginteger divide-and-conquer


【解决方案1】:

Schönhage–Strassen algorithm 是已知最快的乘法算法之一。它需要 O(n log n log log n) 时间。

Fürer's algorithm 是目前已知最快的大数乘法算法,耗时 O(n*log n * 2O(log*n))。

我认为任何乘法算法都不会小于甚至等于 O(n)。这根本不可能。

【讨论】:

  • 酷!早在 2003 年,那是我的一个学生的项目。我在实数上实现了 Karatsuba 和 FFT(不是 Schönhage,这个是 O(n log^* n) ),当你不掌握代数时,这更容易上手。很高兴看到该领域有新的东西。顺便说一句,你混合了这两种复杂性。 Schonhage Strassen 是 O(n log n log log n) 之一。此外,根据维基百科,Fürer 不完全是 O(n log n),而是 O(n log n 2^(log^* n))。
【解决方案2】:

看看Karatsuba algorithm。它涉及一个递归步骤,您可以轻松地使用分治法进行建模。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 2020-06-12
    • 2014-12-08
    • 2016-05-01
    • 2011-06-18
    • 2013-02-12
    • 2012-10-28
    • 2017-12-05
    • 2016-08-16
    相关资源
    最近更新 更多