我正在研究并尝试实施一些算法。我正在尝试理解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;
答案 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