fun()的时间复杂度是多少?
int fun(int n)
{
int count = 0;
for (int i = n; i > 0; i /= 2)
for (int j = 0; j < i; j++)
count += 1;
return count;
}
(A) O(n ^ 2)
(B) O(nLogn)
(C) O(n)
(D) O(nLognLogn)答案: (C)
说明:对于输入整数n,将在以下时间执行fun()的最里面的语句。
n + n / 2 + n / 4 +…1
所以时间复杂度T(n)可以写成
T(n)= O(n + n / 2 + n / 4 +…1)= O(n)
count的值也是n + n / 2 + n / 4 + .. + 1
这个问题的测验