为什么以下代码的复杂度为O(n)?

时间:2018-10-12 10:56:01

标签: time-complexity

我在this page遇到一些练习问题。问题要求下面代码的时间复杂度,答案为O(n)。但是,按照我的理解,外循环运行log(n)次,内循环运行O(n),因此它的复杂度应为O(n * log(n))。

int count = 0;
for (int i = N; i > 0; i /= 2) {
    for (int j = 0; j < i; j++) {
        count += 1;
    }
}

请澄清我在这里想念的东西。

1 个答案:

答案 0 :(得分:5)

内部语句运行N + N / 2 + N / 4 + N / 8 + ...次。那是2 * N = O(N)。