跟随函数fun()的时间复杂度是多少?假设log(x)返回以2为底的对数值。
void fun()
{
int i, j;
for (i=1; i<=n; i++)
for (j=1; j<=log(i); j++)
printf("GeeksforGeeks");
}
(A) Θ(n)
(B) Θ(nLogn)
(C) Θ(n ^ 2)
(D) Θ(n ^ 2(登录))答案: (B)
说明:以上函数的时间复杂度可写为:Θ(log 1)+Θ(log 2)+Θ(log 3)+。 。 。 。 +Θ(log n),即Θ(log n!)
“ log n!”的增长顺序对于较大的n值,“ n log n”相同,即Θ(log n!)=Θ(n log n)。因此fun()的时间复杂度为Θ(n log n)。
表达式Θ(log n!)=Θ(n log n)可以很容易地从斯特林近似(或斯特林公式)中推导
log n! = n log n - n + O(log(n))
选项(B)是正确的。
这个问题的测验