Time complexity 时间复杂度:O(logN)还是O(N)?

Time complexity 时间复杂度:O(logN)还是O(N)?,time-complexity,big-o,analysis,Time Complexity,Big O,Analysis,我认为下面代码的时间复杂度是O(logn),但答案是O(N)。我想知道为什么: int count = 0; for (int i = N; i > 0; i /= 2) { for (int j = 0; j < i; j++) { count += 1; } } int count=0; 对于(int i=N;i>0;i/=2){ 对于(int j=0;j

我认为下面代码的时间复杂度是O(logn),但答案是
O(N)
。我想知道为什么:

int count = 0;
for (int i = N; i > 0; i /= 2) {
    for (int j = 0; j < i; j++) {
        count += 1;
    }
}
int count=0;
对于(int i=N;i>0;i/=2){
对于(int j=0;j
对于inners For循环,它运行了很多次:
N+N/2+N/4…


对我来说,这似乎是
logN
。请帮我理解为什么在这里。谢谢

1,1/2,1/4,1/8。。。1/2**n是a=1,r=1/2的几何序列(a是第一项,r是公共比率)

其总和可使用以下公式计算:

在这种情况下,总和的限制为2,因此:

n + n/2 + n/4 ... = n(1 + 1/2 + 1/4...) -> n * 2

因此,共犯是O(N)

逐步进行,根据代码片段,我们得到:


你知道谐波和的增长顺序吗?