欧几里德算法复杂度分析

欧几里得算法

function Euclid(a; b)
1: if b = 0 then
2: return a;
3: end if
4: return Euclid(b; a mod b);

复杂度分析:
a>=b a >= b ,则有 amodb<a2 a mod b < a 2
证明:
假设 a=bq+r a = b q + r ,其中 q>=1 q >= 1 ,且 0<=r<b 0 <= r < b ,
则有:
r=abq<b r = a − b q < b
因此:
a<b+bq a < b + b q 即 ==> a<b(1+q) a < b ( 1 + q )
于是:
11+q×a<b 1 1 + q × a < b

==> a1+qb<0 a 1 + q − b < 0
==> aq1+qbq<0 a q 1 + q − b q < 0
==> aq1+q+a1+qbq<a1+q a q 1 + q + a 1 + q − b q < a 1 + q
===> abq<a1+q a − b q < a 1 + q
因为 a>=b a >= b ,所以有 q>=1 q >= 1 ,于是: a1+q<=a1+1 a 1 + q <= a 1 + 1
所以有: abq<a1+q<=a2 a − b q < a 1 + q <= a 2
即: amodb<a2 a mod b < a 2 ,每迭代一轮,a,b都会变成原来的一半!
因为算法的终止条件是a或b被处理为0为止。
于是复杂度为: min(O(loga),O(logb)) m i n ( O ( l o g a ) , O ( l o g b ) ) 即O(logn)

你可能感兴趣的:(算法设计)