给定C函数theta(nlogn)或theta(n ^ 2logn)的时间复杂度?

时间:2013-07-29 01:18:16

标签: algorithm time-complexity asymptotic-complexity

我已经计算了以下C函数的时间复杂度,它来到theta (nlogn)。你能告诉我我是否错了,给出的答案是theta(n^2logn)吗?我刚刚开始阅读这些概念。

int unk(int n)
{
  int i,j,k=0;
  for(i=n/2;i<=n;i++)
     for(j=2;j<=n;j=j*2)
        k=k+(n/2);
  return k;
}

我所做的是:外循环执行(n/2+2)次,内循环执行(n/2+1)(logn+1)次,循环体中的语句执行(n/2+1)(logn)次。所以总运行时间为theta(nlogn)。(假设所有成本为1,日志为二进制对数)。

1 个答案:

答案 0 :(得分:4)

我认为你的回答是对的,确实是theta(nlogn)。但是,您的分析似乎有些不对。

外循环执行O(n / 2)次。

内循环每次迭代外循环执行O(logn)次。

通过将两者相乘并删除常数,您到达O(n) * O(logn) = O(nlogn)