考虑以下 C函数。
int fun(int n)
{
int i, j;
for (i = 1; i <= n ; i++)
{
for (j = 1; j < n; j += i)
{
printf("%d %d", i, j);
}
}
}
用 θ 表示法的乐趣时间复杂度为:
(A) θ(n √n)
(B) θ(n 2 )
(C) θ(n log n)
(D) θ(n 2 log n)
答案: (C)
说明:让我们看看最里面的语句“printf(“%d %d”, i, j);”有多少次被执行。
对于 i = 1,语句运行 n 次
第 i 次迭代,语句运行 Θ(n/i) 次。
将 i = 1 到 n 的所有迭代相加,我们得到
因此 T(n) = Θ(n(1 + 1/2 +1/3 + ….)) = Θ(n log n)。
注意 1/1 + 1/2 + 1/3 + … 的值。对于较大的 n 值,1/n 与 Log n 大致相同。
这个问题的测验