关于Big O表示法(N * N?)

时间:2014-06-05 13:30:40

标签: math big-o computer-science

我有一些问题,我正试图找到大O.令我困惑的是(N * N)问题:

for (i=1, sum=0, i <= N; i++) {
  for (j=1; j <= N*N; j++) {
     sum++;
  }
}

我猜它是O(N ^ 3)因为(N * N)可能代表两个循环。

for (i=1, sum=0, i <= N; i++) {
  for (j=1; j <= N*N; j++) {
     for (k=1; k<=j; k++) {
       sum++;
     }
  }
}

如果是,那么这个将是O(N ^ 4)?

3 个答案:

答案 0 :(得分:5)

for (i=1, sum=0, i <= N; i++) {  // loop over i
  for (j=1; j <= N*N; j++) {     // loop over j, no dependency
     sum++;
  }
}

j上的内部循环独立于i,并且具有复杂性O(N*N)。 外循环执行N次,因此总共O(N^3)

for (i=1, sum=0, i <= N; i++) {  // loop over i
  for (j=1; j <= N*N; j++) {     // loop over j, no dependency
     for (k=1; k<=j; k++) {      // loop over k, dependent on j
       sum++;
     }
  }
}

k上的循环取决于jj在整数N*N上独立循环。 总和1 + 2 + ... + N * N等于(N * N + 1) * N * N / 2 O(N^4)。 再一次,i上的循环重复N次,因此总复杂度为O(N^5)

为了计算大O,总是从最里面的循环开始并处理依赖关系!

答案 1 :(得分:1)

您可以使用Sigma表示法有条不紊地正式着手:

enter image description here

答案 2 :(得分:0)

我认为这是O(N ^ 5)。

第一个(外部)循环是O(N)。

第二个是O(N ^ 2)。

最后一个也是O(N ^ 2)。