Euclid在图灵机上最大公约数算法的复杂性

时间:2012-10-31 18:02:29

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

考虑Euclid算法的这种实现:

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)。我的直觉和一些大型测试告诉我,Euclid算法的复杂性在图灵机上仍然是O(a + b)。

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

1 个答案:

答案 0 :(得分: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 <然后交换a和b。
  5. b&gt; = a。设置b = b - a,然后从b中删除所有最低有效位。
  6. 如果b!= 0,请转到4。
  7. 将零位添加到a的末尾。这就是结果。