Es gibt nicht so etwas wie 4N Zeit. Der Algorithmus ist linear, da die Laufzeit des Algorithmus proportional zunimmt, wenn Sie die Größe der Eingabe erhöhen. Mit anderen Worten, wenn Sie die Größe von list
verdoppelt haben, würden Sie erwarten, dass der Algorithmus doppelt so lange dauert.
Es spielt keine Rolle, wie viele Operationen Sie innerhalb Ihrer Schleife ausführen - solange sie jede konstante Zeit (relativ zur Eingabe) sind, wird die Laufzeit der Schleife einfach durch die Anzahl der Iterationen bestimmt.
Mit anderen Worten, diese vier Aussagen sind - alle zusammen - eine O (1) -Operation.
int j = list.length - 1 - i;
int temp = list[i];
list[i] = list[j];
list[j] = temp;
Es gibt nichts signifikant über die Tatsache, dass diese Abfolge von Schritten in vier Aussagen in Java-Syntax ausgedrückt wird - mit javap
experimentieren diese vier Linien Befehle kompiliert in ~ 20 Bytecode schon sagt, und wer weiß, wie viele Prozessorbefehle, die Bytecode wird in konvertiert. Die gute Nachricht ist, dass die Big-O-Notation unabhängig von der jeweiligen Syntax gleich funktioniert - eine Folge von Operationen ist O (1) oder konstante Zeit, wenn ihre Ausführungszeit unabhängig von der Eingabe gleich ist.
Daher machen Sie eine O (1) Operation N-mal; alias O (N).
Ich würde nicht sagen, es ist "den Job in 4N Zeit konkurrieren", aber es ist in der Tat O (N). – khelwood
Mein Verständnis ist, dass Sie in großer O-Notation die Komplexität des Algorithmus in Bezug auf Eingabe und Ausgabe messen. In diesem Fall ist Ihre Eingabe ein Array von N Zahlen, aber die Ausgabe ist auch ein Array von N Elementen (da void wie nichts zurückgibt, bin ich mir nicht sicher, ob das korrekt ist). Aber von dieser Annahme wäre die Komplexität O (1) –
@manuelmourato der Ausgangstyp hat nichts damit zu tun, ob der Algorithmus O (N) ist. – khelwood