嵌套for循环的大O复杂性

时间:2010-08-08 02:38:59

标签: big-o nested-loops

我对以下内容的复杂性感到困惑(内循环内部执行的操作是在恒定时间内):

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

这是O(n ^ 2)还是O(n)?我想O(n ^ 2)。有什么想法吗?

以下内容让我很好奇:

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

2 个答案:

答案 0 :(得分:12)

当然绝对是O(n squared)。这两种情况的摘要解释:1 + 2 + ... + n是n(n+1)/2,即(n squared plus n) / 2(在big-O中我们丢弃第二个,较小的部分,所以我们留下了n平方/ 2当然是O(n squared))。

答案 1 :(得分:3)

你是对的,那些嵌套循环仍然是O(n ^ 2)。实际操作次数接近(n ^ 2)/ 2,在丢弃常数1/2因子后,为O(n ^ 2)。