我在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;
}
}
请澄清我在这里想念的东西。
答案 0 :(得分:5)
内部语句运行N + N / 2 + N / 4 + N / 8 + ...次。那是2 * N = O(N)。