Java if语句嵌套循环的时间复杂度O(N):O(N^4)?
我试图为这段代码找出一个大O的紧密界限: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
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)