p = 0
for(i=1;p<=n;i++){
p = p+i;
}
如何分析此循环的时间复杂度? 我读到它是O(n ^(1/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
因此,最终的复杂度达到