大O。不确定for循环上的更新如何影响它

时间:2018-09-04 05:30:01

标签: java big-o

我对for循环上的更新如何影响BIG O感到困惑

在这样的代码上:

  public static void bigO(int n){
    for(int i=n; i>1; i=i/2){
      for (int j=n; j>1; j=j/2){
        sum++;
      }
    }
  }

我不确定更新(j=j/2)会如何影响它。

1 个答案:

答案 0 :(得分:3)

两个for循环彼此独立,因此总复杂度应大致为两个循环的复杂度的乘积。每个循环为O(lgN),其中lg表示“对数为2”。因此,将其相乘得出总体复杂性为O(lgN*lgN)

要更好地了解O(lgN)的位置,请考虑输入值n=16for中的外部i循环将具有以下迭代:

i  | iteration #
16 | 1
8  | 2
4  | 3
2  | 4

lg(16)实际上等于4,因为2^4 = 16,所以这证实了我们所期望的复杂性。您也可以测试其他n值以说服自己。 j中的内部循环的行为相同,并且独立于i中的外部循环。