为什么此代码中的时间复杂度O(n ^ 2)?

时间:2018-07-03 20:31:20

标签: c loops time-complexity big-o complexity-theory

我只是不明白,为什么时间复杂度是O(n ^ 2)而不是O(n * logn)? 第二个循环每次递增2,所以不是O(logn)吗?

void f3(int n){
  int i,j,s=100;
  int* ar = (int*)malloc(s*sizeof(int));

  for(i=0; i<n; i++){
    s=0;
    for(j=0; j<n; j+=2){
      s+=j;
      printf("%d\n", s);
  }
  free(ar);
}

3 个答案:

答案 0 :(得分:8)

通过递增2,而不是递增1,您正在执行以下N*N*(1/2)。使用big(O)表示法时,您无需关心常量,因此它仍然是N * N。这是因为big(O)表示的是算法增长的复杂性。

答案 1 :(得分:0)

外循环将执行n次,并且每次外循环迭代都会执行n / 2次,因为j + = 2

Order = n×n / 2 = n ^ 2/2 = O(n ^ 2),因为常量不会影响大n的运行时间

答案 2 :(得分:-1)

增量为2,因此循环将运行n / 2,因此复杂度将为n * n / 2。 如果GP中发生了激怒,如2