如何计算这个的复杂性?

时间:2014-09-15 07:10:21

标签: c algorithm complexity-theory

int foo(int n)
{
    int sum = 0;
    for(int k=1; k <= n; k = k * 2) 
    {
        sum += k;
    }
    return sum;
}

我有以下功能。 现在,根据我的说法,foo(n)的运行时复杂度应该是big-o(logn)。 现在,我被要求找出foo的运行时间复杂度(n * n * n * n)。它应该是什么? 据我说,它应该是,只有big-o(logn)。 我说得对吗?

2 个答案:

答案 0 :(得分:4)

问问自己,循环执行了多少次?当输入为n时,为循环创建一个表:

for(int k=1; k <= n; k = k * 2)

  Iteration  |  k 
-------------+-----
      1      |  1
      2      |  2
      3      |  4
     ...     | ...
     ...     | ...
      k      |  n

2 k = n→k = log(n)

现在您要求输入n 4 。只需将表格更改为:

  Iteration  |  k 
-------------+-----
      1      |  1
      2      |  2
      3      |  4
     ...     | ...
     ...     | ...
      k      | n^4

2 k = n 4 →k = log(n 4 )= 4 * log(n)

答案 1 :(得分:4)

是O(log n 4 )→O(4 log n)→O(log n)