【问题标题】:How to compute complexity of these nested loops?如何计算这些嵌套循环的复杂度?
【发布时间】:2014-03-14 00:47:49
【问题描述】:
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--;
}
现在,如何计算它的复杂度?
【问题讨论】:
标签:
loops
complexity-theory
【解决方案1】:
外部while循环只运行一次,因为当内部while循环完成时n等于0并且外部循环不再运行。
因此复杂度仍然是 O(n*m)
编辑:以防万一您打算在外循环中使用不同的循环变量(例如 k),复杂度将是 O(k*n*m)
【解决方案2】:
计算嵌套循环复杂度的正式方式(基于您更正的代码):
【解决方案3】:
O(n*m)
这相当于:
while(n>0)
{
for(int i=0; i < m; i++)
{
}
n--;
}
因为如上所述,两个while 循环的终止条件相同,当内部循环终止时,外部while 循环也终止。
【解决方案4】:
我认为你的意思是三个不同的变量。
第一个 while(n > 0) 循环运行 n 步,
第二个 while(n > 0) 循环再次运行 n 步,
for(int i = 0; i
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)