int i=1,s=1;
while(s<=n)
{
i++;
s=s+i;
}
时间复杂度为O(root(n))。 我不明白它是怎么回事。 因为这个系列就像1 + 2 + ... + k。 请帮忙。
答案 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 / 2
,k = -1/2 +- sqrt(1 + 4 * n)/2
;
你忽略了常量和系数以及O(-1/2 + sqrt(1+4n)/2) = O(sqrt(n))