Java if语句嵌套循环的时间复杂度O(N):O(N^4)?

Java if语句嵌套循环的时间复杂度O(N):O(N^4)?,java,time-complexity,big-o,nested-loops,Java,Time Complexity,Big O,Nested Loops,我试图为这段代码找出一个大O的紧密界限: for(int i = 1 ; i <= n ; i++) { for(int j = 1; j <= i*i ; j++) { if (j% i == 0){ for(int k = 0 ; k<j ; k++ ) sum++; } } } for(int i=1;i您可以通过在不使用if的情况下重写循环来简化分析,如下所示: f

我试图为这段代码找出一个大O的紧密界限:

for(int i = 1 ; i <= n ; i++) {
    for(int j = 1; j <= i*i ; j++) {
        if (j% i == 0){
            for(int k = 0 ; k<j ; k++ )
                sum++;
        }
    }
}

for(int i=1;i您可以通过在不使用
if
的情况下重写循环来简化分析,如下所示:

for(int i = 1 ; i <= n ; i++) {
    for(int j = 1; j <= i ; j++) {
        for(int k = 0 ; k<j*i ; k++ ) {
            sum++;
        }
    }
}

for(int i=1;如果我理解正确:第二个循环现在从j=1运行到j@user2005142是的,没错。
如果
阻止代码到达“有效负载”(即
sum++
),那么我们可以“剪切”分析中的“不做任何事”迭代。我明白了,谢谢!但要澄清的是,不管有效负载如何,一个有n次迭代的空循环在最坏情况下的时间复杂度仍然应该是O(n)?@user2005142是真的。实际上,“空”编译器或执行环境可能会跳过循环,并可能在固定时间内处理循环。但在大O分析中,它仍然是O(N)
    I analyse your question in a more straightfroward way
    we first start by fix i as a costant, 
    for example, assume it to be k,
    so j=1~k^2, when j=k,2k,3k,...,k^2, assume j to be c*k (c=1~k)
    the next loop will be executed c^2 times, 
    so the complexity for a fix i can be expressed as=>
    (1+.....+1)+(1+1+...+2^2)+(1+1+...+3^2)+.....+(1+1+...+k^2)
    = O(k^3)
    so now we set k to be 1~n, so the total complexity will be O(n^4)