Я пытаюсь выяснить сложность этого алгоритма во время выполнения.
public static void main(String[] args) throws InterruptedException{
for (int N=100; N<=1000000; N=N*5) {
long start = System.currentTimeMillis();
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= Math.pow(N,1.5); j++) {
i = i*2;
j = j*2;
Thread.sleep(10);
}
}
long stop = System.currentTimeMillis();
long elapsed = (long)(stop - start);
System.out.println();
System.out.println("For N=" + N + " RT in msec: "+elapsed);
}
}
Первый цикл for:
for (int N=100; N<=1000000; N=N*5) // runs n/5 times, so O(n).
Первый внутренний цикл:
for (int i = 1; i <= N; i++) // runs n times.
Второй внутренний цикл:
for (int j = 1; j <= Math.pow(N,1.5); j++) { // we can consider Math.pow O(1)
i = i*2;
j = j*2;
Thread.sleep(10);
}
Таким образом, умножая все O (n) * O (n) * O (1) = O (n ^ 2) Мой ответ правильный?Я немного запутался в этом.Буду признателен за любые разъяснения по этому вопросу.Спасибо