【问题标题】:The complexity of Euclid's greatest common divisor algorithm on a Turing Machine图灵机上欧几里得最大公约数算法的复杂性
【发布时间】:2012-10-21 06:29:36
【问题描述】:

考虑一下欧几里得算法的这个实现:

function gcd(a, b)
    while b ≠ 0
       t := b
       b := a mod b
       a := t
    return a

wikipedia 上的一个很好的证明表明该算法“总是需要少于 O(h) 次除法,其中 h 是较小数字 b 中的位数”。

但是,在图灵机上,计算 mod b 的过程的时间复杂度为 O(a+b)。我的直觉和一些大型测试告诉我,欧几里得算法的复杂度在图灵机上仍然是 O(a+b)。

关于如何证明这一点的任何想法?

【问题讨论】:

  • 顺便说一句:经典的欧几里得算法不知道 mod。那里使用了一个重复的减号。

标签: complexity-theory big-o time-complexity turing-machines greatest-common-divisor


【解决方案1】:

如果我在图灵机上对二进制数实现 GCD,我会实现以下算法。我看不出它会比 O((ln a + ln b)^2) 小多少。我认为最有效的表示方法是在第 2 步之后按位交错两个值。

  1. 令 s1 = a 的最低有效位中的零数。删除这些底部 s1 零位。
  2. 设 s2 = b 的最低有效位中的零数。删除这些底部 s2 零位。
  3. 令 s = min(s1,s2)
  4. 现在 a 和 b 都是奇数。如果 b
  5. b >= a。设置 b = b - a,然后从 b 中删除所有最低有效零位。
  6. 如果 b != 0,则转到 4。
  7. 在 a 的末尾添加 s 个零位。这就是结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多