大O嵌套循环问题

时间:2015-05-13 18:59:32

标签: java big-o

 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仍然被遍历。任何清晰度都将不胜感激。

3 个答案:

答案 0 :(得分:5)

外循环将精确运行n次,而内循环依赖于i的值。但基本上,它正在进行0, 1, ..., n-1循环,总共(0 + n-1) * (n) / 2 = (n^2 - n) / 2O(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