考虑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)。
关于如何证明这一点的任何想法?
答案 0 :(得分:1)
如果我在图灵机上实现二进制数的GCD,我将实现以下算法。我看不出它会如何小于O((ln a + ln b)^ 2)。我认为最有效的表示是在步骤2之后按位交错两个值。