这段代码的重要特征是什么?

时间:2014-10-14 05:11:55

标签: java sorting methods big-o nested-loops

有人可以帮我找到这段代码的大O吗?我已经尝试过计算它,但我只是不明白如何。

int n = //user input
for (int i = 0; i < n; i++){
    for (int j = 1; j < n; j = j * 2){
        System.out.println(i * j);
    }
}

3 个答案:

答案 0 :(得分:6)

您应该问自己外循环中有多少次迭代,内循环中有多少次迭代。然后你将两者相乘。

外部循环很简单 - 我从0增加到n-1,增量为1,因此迭代总数为n,即O(n)。

在内循环中,j从1增长到n-1,但j在每次迭代中乘以2。如果n = 2 ^ k,对于某些整数k,将存在k次迭代,并且log n = k。因此,内循环中存在O(log n)次迭代。

将两者相乘,得到O(n)* O(log(n))= O(n log(n));

答案 1 :(得分:0)

O(n Log n)。为什么呢?

for(int i=0; i<n;i++){       // n
        for(int j=1; j<n; j=j*2){ //Log n (multiplying by 2)
           System.out.println(i*j);
         }
       }`

答案 2 :(得分:0)

使用Sigma表示法,您可以执行以下操作:

enter image description here