考虑下面的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);
}
}
}
按照θ表示法,fun的时间复杂度为:
(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相同。
这个问题的测验