【问题标题】:Confused with Big O Notation对大 O 表示法感到困惑
【发布时间】:2014-09-28 00:17:45
【问题描述】:

所以我知道第一个 for 循环运行 O(n) 次,然后在里面运行 3 次,然后再运行 3 次。不过,我该如何用大 O 表示法来表达呢?那么这2个打印语句重要吗?如何将它们添加到我的 big-o 表达式中?谢谢,真的很困惑,感谢任何帮助。

    for (int x = 0; x < n; x++) {
            for (int j = 0; j < 3; j++) {
                for (int k = 0; k < 3; k++) {
                    printf("%d", arr[x]);
                   }
                printf("\n");
            }
    }

【问题讨论】:

    标签: c performance algorithm big-o


    【解决方案1】:

    O(n) 是线性时间,因此任何k * O(n) 其中k 是一个常数(如在您的示例中)也是线性时间,并且仅表示为O(n)。您的示例具有 O(n) 时间复杂度。

    【讨论】:

      【解决方案2】:

      大 O 表示法始终定义为输入大小 - n 的函数。 Big O 给出了运行该模块所花费的总时间的上限。因为无论 n 的输入大小如何,您的内部“for”循环总是运行 3*3 =9 次 - 在 Big O 计算中仍然被视为常数时间

      Time Complexity = O(n+9+constantTimeToPrint) = O(n)
      

      【讨论】:

      • 所以我基本上可以忽略 9+printf 部分?
      • 好吧,你实际上并没有忽略它,而是根据定义 O(n + constant) = O(n)
      【解决方案3】:

      两个内循环是恒定的,所以它仍然是 O(n)。常数因素无关紧要,运行时间仅随输入大小而变化。

      【讨论】:

        猜你喜欢
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2019-03-14
        • 2017-10-29
        • 1970-01-01
        • 2016-12-27
        相关资源
        最近更新 更多