Java 大O型嵌套for循环问题 publicstaticvoidmain(字符串[]args){ 整数计数=0; int n=20; 对于(int i=0;i0;j--){ 计数++; } } 系统输出打印项次(计数); }

Java 大O型嵌套for循环问题 publicstaticvoidmain(字符串[]args){ 整数计数=0; int n=20; 对于(int i=0;i0;j--){ 计数++; } } 系统输出打印项次(计数); },java,big-o,Java,Big O,上面是一个简单的嵌套for循环的代码,我和我的同事对这个循环的大O有疑问 正如我所看到的,每个for循环都是o(n),o(n)*o(n)构成o(n^2)。然而,由于第二个for循环将它从第一个循环中取出,并且在第一个循环中不执行(例如,当J为0时),因此会出现问题。我认为这不会影响它,因为第一个循环的两组数据n-I和第二个循环的j-I仍在被遍历。请澄清。任何时候有两个嵌套循环时,必须假设绝对最坏的情况(即循环执行n次)。所以这里的大O表示法是O(n^2)。外循环将精确运行n次,而内循环取决于i的

上面是一个简单的嵌套for循环的代码,我和我的同事对这个循环的大O有疑问


正如我所看到的,每个for循环都是o(n),o(n)*o(n)构成o(n^2)。然而,由于第二个for循环将它从第一个循环中取出,并且在第一个循环中不执行(例如,当J为0时),因此会出现问题。我认为这不会影响它,因为第一个循环的两组数据n-I和第二个循环的j-I仍在被遍历。请澄清。

任何时候有两个嵌套循环时,必须假设绝对最坏的情况(即循环执行n次)。所以这里的大O表示法是O(n^2)。

外循环将精确运行
n
次,而内循环取决于
i
的值。但基本上,它是在做
0,1,…,n-1
循环,总共是
(0+n-1)*(n)/2=(n^2-n)/2
,也就是
O(n^2)
外循环运行n次。对于外循环的每次迭代,内循环运行不同的次数,首先是0,然后是1,2,…n-1,n,这是从0到n=n(n+1)/2~=n^2/2的总和,这是O(n^2)


这并不总是正确的。您可以想出几个不会产生n^2行为的嵌套循环。这恰好不是一个。
for(inti=0;i
将在O(n)时间内运行。
 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);
    }