如何计算这些嵌套循环的复杂性?

时间:2014-03-14 00:47:49

标签: loops complexity-theory

while(n > 0){    
    while(n > 0){   
        for(int i = 0; i < m; i++){
            cout << ":) ";
            m--;
        }
        n--;
    }
    n--;
}

如何计算复杂性? n是任何自然数。


好的,我正在纠正我的代码:

while(n > 0){    
    while(s > 0){   
        for(int i = 0; i < m; i++){
            cout << ":) ";
            m--;
        }
        s--;
    }
    n--;
}

现在,如何计算复杂性?

4 个答案:

答案 0 :(得分:2)

外部while循环仅运行一次,因为内部while循环完成时n等于0且外循环不再运行。

因此,复杂性仍然是O(n * m)

编辑:如果您打算在外部循环中使用不同的循环变量(比如k),复杂性将为O(k * n * m)

答案 1 :(得分:1)

计算嵌套循环复杂性的正式方式(基于更正后的代码):

enter image description here

答案 2 :(得分:0)

O(n*m)

这相当于:

while(n>0)
{
   for(int i=0; i < m; i++)
   {
   }
n--;
}

因为正如所指出的,while循环的终止条件是相同的,当内部循环终止时,外部while循环也终止。

答案 3 :(得分:0)

我认为你的意思是三个不同的变量。

第一个while(n&gt; 0)循环正好运行n个步骤,

第二个while(n&gt; 0)循环再次运行n个步骤,

for(int i = 0; i&lt; m; i ++)循环运行M / 2步,因为在每一步,i递增,m递减,使for循环等效于

for(int i = 0; i < m; i+=2){
            cout << ":) ";
        }

所以时间复杂度为O(N * N * M / 2)= O(N ^ 2 * M)

如果while循环意味着相同,那么外部循环只是一个副本,并且什么都不做。

因此,这种情况下的时间复杂度为O(N * M / 2)= O(N * M)