一个简单算法的Big-O表示法

时间:2013-11-13 09:06:34

标签: algorithm big-o computer-science

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

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

3 个答案:

答案 0 :(得分:5)

您的估算来自progression公式:

enter image description here

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

答案 1 :(得分:3)

如果添加第二个循环的所有迭代,则得到1 + 2 + 3 + ... + n,它等于n(n + 1)/ 2(n是数组长度)。那是n ^ 2/2 + n / 2。正如您可能已经知道的那样,大写符号中的相关术语是最大的幂,并且系数不相关。所以,你的复杂性仍然是O(n ^ 2)。

答案 2 :(得分:1)

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

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

希望有所帮助