【问题标题】:Calculating complexity of nested loops计算嵌套循环的复杂度
【发布时间】:2015-01-26 03:03:23
【问题描述】:

我知道每个 for 循环都是 O(log₂n),但我不确定它们中的 3 个一起会产生什么? O(3⋅log2n)?谢谢各位。

for (int i = n; i > 0; i = i / 2) {
    for (int j = n; j > 0; j = j / 2) {
        for (int k = n; k > 0; k = k / 2) {
            count++;
        }
    }
}

【问题讨论】:

  • 我觉得不是O(3log2n),应该是O(logN * logN * logN) PS:可以让n从2到1024,打印出(n, count的元组),然后画一条线。
  • 我投票结束这个问题,因为它是关于计算复杂性的纯理论问题,而不是关于编程的实际问题。试试cs.stackexchange.com 另外,这个标题不太可能对其他有同样问题的人有用。 (应该更像“计算嵌套循环的复杂度”)。
  • 在cs上太初级了:

标签: big-o complexity-theory time-complexity


【解决方案1】:

如你所说,每个循环的时间复杂度都为 Θ(log₂n)

由于循环不相互依赖,即变量ijk相互没有影响,三个嵌套循环的复杂度可以简单地相乘,你得到Θ((log₂n)⋅(log₂n)⋅(log₂n)) = Θ((log₂n)³) ,也写作Θ(log₂³n)。这意味着它也在O(log₂³n)

注意:您可以log₂³n 简化为3⋅log₂n,因为log₂³n 不等于log₂n³

【讨论】:

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