以下
的时间复杂度int i,j,k;
for(i=n/2 ;i<=n ;i++)
{
for(j=1;j<=n/2;j*3)
{
for(k=1;k<=n;k=k*2)
{
pf('vish');
}
}
}
答案 0 :(得分:1)
让我们看一下每个循环的执行次数:
for(i=n/2 ;i<=n ;i++) // executed O(n) times
{
for(j=1;j<=n/2;j*3) // executed O(log_3(n)) times
{
for(k=1;k<=n;k=k*2) // executed O(log_2(n)) times
{
pf('vish');
}
}
}
假设pf
为O(1)
(常数时间),则总体复杂度为O(n * log(n)^2)
。
答案 1 :(得分:0)
您可以通过应用一些简单的规则来解决这个问题。
例如,请注意,内部循环(在j
和i
上)不依赖于i
。
for(i=n/2 ;i<=n ;i++)
{
for(j=1;j<=n/2;j*3)
{
for(k=1;k<=n;k=k*2)
如果边界是Θ(n),并且增量是固定的加法,则迭代次数为Θ(n)。所以,例如
for(i = n / 2; i&lt; = n; i ++)
执行Θ(n)次。
如果边界是Θ(n),并且增量是固定的乘法,则迭代次数为Θ(log(n))。所以,例如
为(J = 1; J&LT; = N / 2;Ĵ* 3)
是Θ(log(n))。
常量函数是 O(1)。
PF( 'vish');
是 O(1)。
结合上述规则,我们有一个 O(1)函数被执行Θ(n)Θ(log(n))Θ(log(n))倍。复杂性为Θ(n log(n) 2 )。