Ich habe versucht, Big O zu lernen und bin verwirrt auf einem Algorithmus, den ich gerade gestoßen bin. Der Algorithmus ist:Big O Summe der Ganzzahlen Laufzeit
void pairs(int[] array){
for (int i=0; i < array.length; i++){
for (int j=i+1; j<array.length; j++){
System.out.println(array[i]+","+array[j]);
}
}
}
Ich denke, die erste for-Schleife O(n)
ist und ich weiß, die zweite for-Schleife O(1/2*n(n+1))
ist. Die Antwort auf das Problem war, dass die Laufzeit für die Funktion O(n^2)
ist. Ich vereinfachte O(1/2*n(n+1))
zu O(1/2*(n^2+n))
. So bin ich verwirrt, weil ich dachte, dass Sie die zwei Laufzeitbegriffe multiplizieren mussten, da die for-Schleife verschachtelt ist, die O(n) * O(1/2*(n^2+n))
geben würde. Ich vereinfachte dies auf O(1/2n^3 + 1/2n^2)
. Von dem, was ich von Big O verstehe, behältst du nur den größten Begriff, so würde dies auf O(n^3)
reduzieren. Kann mir jemand helfen, wo ich falsch gelaufen bin? Nicht sicher, wie die Antwort ist O(n^2)
anstelle von O(n^3)
.
Das ist nicht gültig Python-Code. – BrenBarn
@BrenBarn Ja, ich habe diesen einen geschlachtet. Ich lege es in Java wieder auf. – kdubs
Warum denken Sie, die zweite Schleife ist 1/2 * n (n + 1)? – BrenBarn