📜  算法|算法分析|问题1

📅  最后修改于: 2021-06-30 00:03:47             🧑  作者: Mango

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

这个问题的测验