具有乘法递增For循环的大O表示法

时间:2017-10-02 00:33:11

标签: java big-o

我对此代码的Big O表示法有疑问:

    public static void printItA(int n){
    for(int i=0; i< n; i++){
        for (int j = 1; j<n; j*=2){
            System.out.println("Something");
        }
      }
    }

在我看来,大O应该是O(n ^ 2),但for循环的j * = 2部分对我来说是困惑的。任何人都可以为我解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

举一个N = 16

的例子

您的外循环将迭代16次。 O(N)即与您的输入呈线性关系。

你的内循环将为每个外循环迭代4(1,2,4,8,16)次。你的内部循环在每次迭代时将工作量减少2。 O(log n)

最后的运行时复杂度O(n * log(n))