Auswertung der Untersuchung von RippleSort in BlueJ bzw. in einer Simulation
Die Auswertung legt die Vermutung nahe, dass es zwischen der Anzahl der Vergleiche und der Anzahl der Elemente einen quadratischen Zusammenhang gibt, denn:
- Erhöht sich die Anzahl der Elemente um den Faktor 10, so erhöht sich die Anzahl der Vergleiche ca. um den Faktor 100.
- Erhöht sich die Anzahl der Elemente um den Faktor 5, so erhöht sich die Anzahl der Vergleiche ca. um den Faktor 25.
- Erhöht sich die Anzahl der Elemente um den Faktor 2, so erhöht sich die Anzahl der Vergleiche ca. um den Faktor 4.
Das heißt aber auch, dass es wahrscheinlich einen quadratischen Zusammenhang zwischen der Gesamtzeit des Sortierens der Liste und der Anzahl der Elemente gibt. Stellt man dies grafisch dar, so kann man einen Parabelast vermuten.
Bildet man den Proportionalitätsfaktor, so untermauert dieser die Hypothesen: V(n ) ~ n2 bzw. T(n ) ~ n2
Können wir dies erklären?
- Beim ersten Durchlaufen wird das erste Element mit allen weiteren Elementen verglichen, also mit n – 1 Elementen.
- Beim zweiten Durchlauf wird das erste Element nicht mehr berücksichtigt, es wird das zweite Element mit den nachfolgenden verglichen, also mit n – 2 Elementen.
- Beim dritten Durchlauf wird ... bis zum letzten Element.
Der gesamte Sortiervorgang ist also nach V(n ) = ((n – 1) + (n – 2) + ... + 2 + 1) Vergleichen beendet.
Die in der Formel enthaltene Summierung lässt sich mithilfe der Gaußschen Summenformel umschreiben zu
V(n ) = ½(n2 - n) ≈ ½n2.
Diese Überlegung kann man für den worst case auch für die Vertauschungen machen. Auch dort ergibt sich ein quadratischer Zusammenhang. Da jeder Vergleich und eine Vertauschung eine bestimmte Anzahl von Rechentakten benötigt, können diese als eine Abschätzung der Laufzeit eines Algorithmus unabhängig von der Taktfrequenz eines Prozessors verwendet werden.
Die Laufzeit eines Algorithmus kann durch die Anzahl der für den Algorithmus notwendigen Elementaroperationen beschrieben werden.
In der Regel interessiert nicht die exakte Anzahl Elementaroperationen, sondern eine grobe Abschätzung mithilfe einer oberen Schranke. Man nutzt dazu Klassenbezeichnungen mithilfe des Landau-Symbols O. In unserem Fall liegt eine quadratische Funktion vor. Dies wird als O(n2) abgeschätzt und bedeutet, dass sich die Laufzeit des Algorithmus höchstens wie n2 verhält. Damit haben wir einen Ausdruck, der die zeitliche Qualität eines Algorithmus beschreibt.
RippleSort hat im worst, average und best case ein Laufzeitverhalten von O(n2).