【问题标题】:Time Complexity of multiple nested loops多个嵌套循环的时间复杂度
【发布时间】:2021-02-08 14:06:23
【问题描述】:

以下代码的复杂性是什么: 既然增量不是1,条件也不是直接的,那么复杂度怎么计算呢?

for(int h =0; h<n;h+=2)
    {
       for (int j =1; j<=n*n; j*=3)
       {
          for (int k =2; k+k <=n;++k)
          { 
          } 
       } 
    }

【问题讨论】:

    标签: time-complexity big-o nested-for-loop


    【解决方案1】:

    有 3 个嵌套循环。让我们分析它们中的每一个(请记住,我们不关心任何常量,无论它们有多大):

    for(int h=0; h&lt;n; h+=2) - O(12N) -> O(N)

    for (int j=1; j&lt;=n*n; j*=3) - O(log3N2) -> O(logN<sup>2</sup>)

    for (int k=2; k+k&lt;=n; ++k)- O(12N) -> O(N)

    由于所有循环都是嵌套的 O(N * logN2 * N) -> O(N<sup>2</sup>*logN<sup>2</sup>)

    【讨论】:

      【解决方案2】:

      第一个循环:n 次,不断跳转(+2)。因此n/2 次是O(n)

      第二次循环:n^2 次,几何跳跃 (*3) 因此\log_{3}{n^2} = O(\log{n})

      第三次循环:n/2次,也是n/2

      循环是嵌套的,所以你得到了O\(n*log{n}*\)=O\(n^{2}log{n}\)

      【讨论】:

      • 谢谢!还有一个后续问题:如果第二个循环和第三个循环没有任何语句并且在循环后只有一个分号,那么我们如何计算复杂度?示例 :for(int h =0; h
      • 如果我正确理解了你写的内容,那么你应该对第二个和第三个循环求和。 (经验法则:嵌套相乘,不相交相加
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2019-05-18
      相关资源
      最近更新 更多