有人可以帮我找到这段代码的大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);
}
}
答案 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表示法,您可以执行以下操作: