时间复杂度迭代程序的分析

时间:2016-09-02 20:51:02

标签: algorithm time-complexity

以下

的时间复杂度
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');
         }
    }
}

2 个答案:

答案 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');
        }
    }
}

假设pfO(1)(常数时间),则总体复杂度为O(n * log(n)^2)

答案 1 :(得分:0)

您可以通过应用一些简单的规则来解决这个问题。

  1. 当你有嵌套循环,并且内部循环的边界和步骤独立于外部循环的索引时,最内部主体执行的迭代次数是每个循环的迭代次数的乘积。
  2. 例如,请注意,内部循环(在ji上)不依赖于i

    for(i=n/2 ;i<=n ;i++)
    {
      for(j=1;j<=n/2;j*3)
        {
          for(k=1;k<=n;k=k*2)
    
    1. 如果边界是Θ(n),并且增量是固定的加法,则迭代次数为Θ(n)。所以,例如

      for(i = n / 2; i&lt; = n; i ++)

    2. 执行Θ(n)次。

      1. 如果边界是Θ(n),并且增量是固定的乘法,则迭代次数为Θ(log(n))。所以,例如

        为(J = 1; J&LT; = N / 2;Ĵ* 3)

      2. Θ(log(n))

        1. 常量函数是 O(1)

          PF( 'vish');

        2. O(1)

          结合上述规则,我们有一个 O(1)函数被执行Θ(n)Θ(log(n))Θ(log(n))倍。复杂性为Θ(n log(n) 2