for循环的时间复杂度?

时间:2018-09-04 20:39:00

标签: algorithm data-structures

p = 0
for(i=1;p<=n;i++){
 p = p+i;
}

如何分析此循环的时间复杂度? 我读到它是O(n ^(1/2))。但是如何?

2 个答案:

答案 0 :(得分:2)

p如何增加?首先,我们先添加1,然后添加2,然后添加3 ...然后添加k。

因此在步骤k,p = 1 + 2 + 3 + ... + k。 formula的值是k *(k + 1)/2。现在,要达到n,需要多少步?

让我们尝试将k替换为sqrt(2n)。根据公式,我们得到sqrt(2n)*(sqrt(2n)+1)/2。这等于2n + sqrt(2n)/2。等于n +一些常数。因此,在sqrt(2n)迭代中,我们已经达到p> n。这给了我们O(sqrt(2n))的上限,它与O(sqrt(n))相同。

答案 1 :(得分:0)

p = 0
for(i=1;p<=n;i++){
 p = p+i;
}

对于每次迭代,您都添加一个1号。比以前高

step 1 : p = p + 1;
step 2 : p = p + 2;
step 3 : p = p + 3;
step 4 : p = p + 4;
.....
.....
step m : p = p + m;

您的条件是将p与n进行比较

p<=n

您在p中添加的值之和就像

1+2+3+.....+m <= n

在数学中,求和以上的等式类似于

(m * (m + 1))/2 <= n

因此,最终的复杂度达到