我遇到过这个问题,要求找时间的复杂性。
int count = 0;
for (int i = N; i > 0; i /= 2) {
for (int j = 0; j < i; j++) {
count += 1;
}
}
它表示时间复杂度为O(n)
,如果它是O(nlogn)
,则第一个循环为logn
,第二个循环为n
。
答案 0 :(得分:1)
它说它的时间复杂度是O(n),如果它是O(nlogn)那么 第一个循环是logn,第二个循环是n。
内循环基于外循环。因此,您的声明无效。
并且,+ =(加法赋值运算符)复杂度为O(1)。
对于外循环的第一次迭代,内循环将执行N次。
对于外循环的第二次迭代,内循环将执行N / 2次。
等等......
因此,总执行步骤
= N + N/2 + ... + 1
// log 2 N次几何级数...
~ N / (1-(1/2)) (Infinite GP Summation Formula) //though the series would go up to 1
~ 2N.
// ~ means approximately.
因此,代码的时间复杂度为O(N)。
所以,给出的答案是正确的。