Time complexity 当条件依赖于其他变量时,如何解决单循环复杂性?

Time complexity 当条件依赖于其他变量时,如何解决单循环复杂性?,time-complexity,Time Complexity,此代码的时间复杂度是多少: int p=0; for(int i=1;p<=n;i+=2) p=p+i; 由于循环不依赖于i,因此它不会n次。 当p大于时,循环将终止,因此: p>n Since p=k(k+1)/2 k(k+1)/2>n This expression can be written as k^2=n (approximate) k=√n 当我增加2时,请帮助我理解上述代码的复杂性。您可以像以前一样: i=1 -> p=0+1 i=2

此代码的时间复杂度是多少:

    int p=0;
    for(int i=1;p<=n;i+=2) p=p+i;
由于循环不依赖于i,因此它不会n次。 当p大于时,循环将终止,因此:

p>n
Since p=k(k+1)/2
k(k+1)/2>n
This expression can be written as
k^2=n (approximate)
k=√n

当我增加2时,请帮助我理解上述代码的复杂性。

您可以像以前一样:

i=1 -> p=0+1
i=2 -> p=0+1+3
i=3 -> p=0+1+3+5
...
所以你把每个奇数加起来。这大约是(取决于您的n是奇数还是偶数)
n^2/4

所以你要找一个
k
s.t.
k^2/4>n

由于在每次迭代中i增加2,
k
等于迭代次数的两倍,但对于大O表示法,这并不重要,因此再次得到
O(√n) 

谢谢您的评论。它会不会变成算术级数,例如:0+2+4+6+8+。。。。。。等于k(k1+kn)/2。这里k0代表系列的第一个数字,kn代表最后一个数字。所以,在这个问题中,我的结果是k(k1+kn)/2>n。但是你的评论对我来说很有意义,我不这么认为。从i=1开始,然后增加2
i=1 -> p=0+1
i=2 -> p=0+1+3
i=3 -> p=0+1+3+5
...