我已经计算了以下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,日志为二进制对数)。
答案 0 :(得分:4)
我认为你的回答是对的,确实是theta(nlogn)。但是,您的分析似乎有些不对。
外循环执行O(n / 2)次。
内循环每次迭代外循环执行O(logn)次。
通过将两者相乘并删除常数,您到达O(n) * O(logn) = O(nlogn)
。