大O符号和算法

时间:2010-12-26 21:10:26

标签: c# algorithm big-o

我正在研究并尝试实施一些算法。我正在尝试理解Big O表示法,我无法弄清楚下面算法的Big O复杂性:

while (a != 0 && b != 0)
{
    if (a > b)
        a %= b;
    else
        b %= a;
}

if (a == 0)
    common=b;
else
    common=a;

3 个答案:

答案 0 :(得分:6)

很容易看出,经过两次迭代后,最少的数字变得至少小两倍。如果它在开始时等于m,那么在2K迭代之后它将不超过m / 2 ^ K.如果我们在这里放置K = [log_2(m)] + 1,我们将看到在2K迭代之后,最少的数字变为零,并且循环终止。因此,迭代次数不超过2(log_2 m + 1)= O(log m)。

答案 1 :(得分:4)

这是用于计算两个整数的最大公约数的欧几里德算法。我将留给你研究这种算法的复杂性,但Fibonnacci数字起着重要的作用。

答案 2 :(得分:0)

大多数人(不是数学家)从不需要找出那些东西,它已经记录在案:http://en.wikipedia.org/wiki/Euclidean_algorithm#Algorithmic_efficiency