以下时间复杂度

时间:2013-03-02 13:23:08

标签: time time-complexity asymptotic-complexity

int i=1,s=1;
while(s<=n)
{
i++;
s=s+i;
}

时间复杂度为O(root(n))。 我不明白它是怎么回事。 因为这个系列就像1 + 2 + ... + k。 请帮忙。

3 个答案:

答案 0 :(得分:1)

让循环执行x次。现在,只要s小于n,循环就会执行。我们有:

第一次迭代后:
              s = s+1
第二次迭代后:
              s = s + 1 + 2

随着x迭代的继续,最后我们将有

1+2...+x <= n

=&GT; (x*(x + 1))/2 <= n

=&GT; O(x^2)&lt; = n

=&GT; x= O (root(n))

答案 1 :(得分:0)

这会计算总和s(k)=1+2+...+k并在s(k) > n时停止。

s(k)=k*(k+1)/2起,s(k)超过n所需的迭代次数为O(sqrt(n))

答案 2 :(得分:0)

s(k) = 1 + 2 + 3 + ... k = (k + 1) * k / 2

s(k) >= n您需要至少k步。 n = (k + 1) * k / 2k = -1/2 +- sqrt(1 + 4 * n)/2;

你忽略了常量和系数以及O(-1/2 + sqrt(1+4n)/2) = O(sqrt(n))