考虑以下 C函数。
int fun1 (int n)
{
int i, j, k, p, q = 0;
for (i = 1; i 1; j = j/2)
++p;
for (k = 1; k < p; k = k*2)
++q;
}
return q;
}
以下哪一项最接近函数fun1 的返回值?
(A) n 3
(B) n (logn) 2
(C)日志
(D) nlog(logn)答案: (D)
解释:
int fun1 (int n)
{
int i, j, k, p, q = 0;
// This loop runs Θ(n) time
for (i = 1; i < n; ++i)
{
p = 0;
// This loop runs Θ(Log n) times. Refer this
for (j=n; j > 1; j=j/2)
++p;
// Since above loop runs Θ(Log n) times, p = Θ(Log n)
// This loop runs Θ(Log p) times which loglogn
for (k=1; k < p; k=k*2)
++q;
}
return q;
}
T(n) = n(logn + loglogn)
T(n) = n(logn) 显性
但请注意这里我们返回 q 位于 loglogn 所以 ans 应该是 T(n) = nloglogn
有关详细信息,请参阅此处。
这个问题的测验