欧几里德算法复杂度分析

版权声明:本文为博主jmh原创文章,未经博主允许不得转载。 https://blog.csdn.net/jmh1996/article/details/82709146

欧几里得算法

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 mod b < a 2
证明:
假设 a = b q + r ,其中 q >= 1 ,且 0 <= r < b ,
则有:
r = a b q < b
因此:
a < b + b q 即 ==> a < b ( 1 + q )
于是:
1 1 + q × a < b

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

猜你喜欢

转载自blog.csdn.net/jmh1996/article/details/82709146