【问题标题】:Algorithm Complexity loop算法复杂度循环
【发布时间】:2014-04-02 19:47:44
【问题描述】:

三重嵌套循环的时间复杂度

for(int i=0; i<n; i++)
    for(int j=i+1; j<n; j++)
        for(int k=j+1; k<n; k++)

我想知道时间复杂度的正确解。

【问题讨论】:

  • 到目前为止你尝试过什么?你觉得它是什么?请在此处发布之前演示解决问题的基本努力。
  • 尝试确定第一个循环的迭代次数,对于第一个循环的每次迭代,第二个循环的迭代次数,依此类推......另外,整体复杂度将取决于第三个循环主体的复杂性,但您可以将其留到最后。你可以试着画一棵树,这对你来说可能更容易。

标签: loops complexity-theory


【解决方案1】:

确定算法增长顺序的正式解决方案:

【讨论】:

    【解决方案2】:

    第一个猜测:三个循环取决于n,所以应该是O(n³)

    如果您尝试计算确切的复杂度,则必须计算内部循环并将其与外部循环相乘。

    内循环采用O(n-k)
    中间循环采用O(n-j + n-j-1 + ... + n-j-n) = O((n-j) ⋅ (n-j+1) / 2) = O((n-j)²)
    外循环采用O((n-1)² + (n-2)² + ... + (n-n+1)²) = O(n³)

    当然这不准确,但就 big-O 而言,它已经足够准确了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多