jmi*_*hra 4 java big-o code-analysis for-loop time-complexity
sum = 0;
for (i = 1; i <= n; i++) { //#1
for (j = 1; j <= i * i; j++) { //#2
if (j % i == 0) { //#3
for (k = 1; k <= j; k++) { //#4
sum++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
以上让我感到困惑
Suppose #1 runs for N times
#2 runs for N^2 times
#3 runs for N/c since for N inputs N/c could be true conditions
#4 runs for N times
Run Code Online (Sandbox Code Playgroud)
因此大致我可以看O(N ^ 5).我不确定.请帮忙澄清一下.
编辑我想知道运行时if(j%i==0).由于它N^2从其父循环中获取输入,因此可以(N^2)/c执行而不是执行N/c
我会说它的O(N ^ 4)和它一样.
for (int i = 1; i <= n; i++) //#1 O(n ...
for (int j = i; j <= i * i; j+=i) //#2 ... * n ...
for (int k = 1; k <= j; k++) //#4 ... * n^2) as j ~= i^2
sum++;
Run Code Online (Sandbox Code Playgroud)
要么
public static void main(String... args) {
int n = 9000;
System.out.println((double) f(n * 10) / f(n));
}
private static long f(long n) {
long sum = 0;
for (long i = 1; i <= n; i++) //#1
for (long j = 1; j <= i; j++) //#2
sum += i * j; // # 4
return sum;
}
Run Code Online (Sandbox Code Playgroud)
版画
9996.667534360826
Run Code Online (Sandbox Code Playgroud)
这非常接近10 ^ 4