【问题标题】: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)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-24
            • 2013-09-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多