【问题标题】:Big-O notation representation of a simple algorithm简单算法的大 O 表示法表示
【发布时间】:2013-11-25 19:18:53
【问题描述】:

如何用 Big-O 表示法表示其复杂性?我有点困惑,因为第二个 for 循环根据外部循环的索引而变化。还是 O(n^2) 吗?还是不那么复杂?提前致谢

for (int k = 0; k<arr.length; k++){
      for (m = k; m<arr.length; m++){
           //do something
      }
}

【问题讨论】:

    标签: algorithm big-o computer-science


    【解决方案1】:

    您的估计来自progression 公式:

    因此是O(n^2)。为什么你的案子是进展的?因为它是您循环的 n + (n-1) + ... + 1 总和。

    【讨论】:

      【解决方案2】:

      如果将第二个循环的所有迭代相加,则得到 1+2+3+...+n,它等于 n(n+1)/2(n 是数组长度)。即 n^2/2 + n/2。您可能已经知道,大哦记法中的相关项是最大幂的一个,而系数不相关。所以,你的复杂度仍然是 O(n^2)。

      【讨论】:

        【解决方案3】:

        运行时是 n^2 循环的 cca 一半

        • 但在大 O 表示法中它仍然是 O(n^2)
        • 因为任何恒定的时间/周期 - 操作都表示为 O(1)
        • 所以 O((n^2)/2) -> O((n^2)/c) -> O(n^2)
        • 非正式地有很多人使用 O((n^2)/2) 包括我自己的目的(它更直观和可比较)...更接近循环/运行时

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2014-03-23
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          • 2014-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          相关资源
          最近更新 更多