public static void main(String[] args) {
int count = 0;
int n = 20;
for (int i = 0; i < n; i++) {
for (int j = i; j > 0; j--) {
count++;
}
}
System.out.println(count);
}
上面是一个简单的嵌套for循环的代码,我和我的同事们正在讨论这个大O的问题。
我可以看到每个for循环是o(n)和o(n)* o(n)使o(n ^ 2)。然而有一个问题是由于第二个for循环从第一个循环开始从i开始,并且当J为0时不会在第一个循环中执行。我认为这不会影响它因为第一个循环的两组数据ni和第二个循环的ji仍然被遍历。任何清晰度都将不胜感激。
答案 0 :(得分:5)
外循环将精确运行n
次,而内循环依赖于i
的值。但基本上,它正在进行0, 1, ..., n-1
循环,总共(0 + n-1) * (n) / 2 = (n^2 - n) / 2
即O(n^2)
答案 1 :(得分:1)
任何时候你有两个嵌套循环,你必须假设绝对最坏的情况(也就是说,循环执行n次)。所以这里的大O符号是O(n ^ 2)。
答案 2 :(得分:1)
外循环运行n次。对于外循环的每次迭代,内循环运行不同的次数,先是0,然后是1,2,... n-1,n,其中=从0到n = n(n + 1)/的求和2~ = n ^ 2/2,即O(n ^ 2)
请参阅http://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF