跟随函数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(Logn))答案:(乙)
说明:上述函数的时间复杂度可以写成: Θ(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)是正确的。
这个问题的测验