Adaptiver Sortieralgorithmus
Diese Baustelle befindet sich fälschlicherweise im Artikelnamensraum. Bitte verschiebe die Seite oder entferne den Baustein {{Baustelle}} .
|
Adaptive Sortieralgorithmen sind Sortieralgorithmen, deren Kontrollfluss von den Eingabedaten abhängt. Insbesondere sind adaptive Sortieralgorithmen von Interesse, die auf Eingaben, die bereits über eine gewisse Ordnung verfügen, geringere Laufzeiten erzielen, als auf Eingaben ohne Struktur. Viele der bekannten adaptiven Sortieralgorithmen sind durch die Abwandlung bereits bekannter Algorithmen entstanden.
Da es in der Praxis oft vor kommt, dass Eingaben bereits beinahe sortiert sind, ist man an Algorithmen interessiert, die in diesen Fällen besonders schnell arbeiten. Das Ziel dabei ist es die untere Schranke für den Average-Case bei vergleichsbasierten Sortieralgorithmen zu unterbieten.
Bei der Laufzeitanalyse der adaptiven Verfahren wird neben der Eingabegröße auch ein Maß für die bereits vorhandene Ordnung in der Eingabe einbezogen - im Gegensatz zu klassischen vergleichsbasierten Sortierverfahren, bei denen nur zwischen Best-Case, Average-Case und Worst-Case unterschieden wird, das Verhalten der Algorithmen zwischen diesen Fällen aber nicht weiter untersucht wird.
Maße der Ordnung
Damit die bereits vorhandene Ordnung in der Eingabe in die Analyse des Agorithmus einfließen kann, muss diese Ordnung gemessen werden. Dafür haben sich mehrere verschiedene Maße etabliert.
Ein häufig verwendetes Maß[1] ist die Anzahl der Fehlstände, also die Anzahl der Paare in falscher Ordnung, in der Eingabe :
- .
Weitere oft genutzte Maße[1] sind:
- die Anzahl von Serien aufeinanderfolgender, ansteigender Elemente, sogenannter "runs":
- die Anzahl von Elementen, die mindestens entfernt werden müssen, um eine sortierte Folge zu erhalten:
- die minimale Anzahl von Vertauschungen je zweier Elemente, um die Eingabe zu sortieren:
Beispiele
Eingabe | ||||
---|---|---|---|---|
0 | 1 | 0 | 0 | |
4 | 2 | 1 | 4 | |
6 | 4 | 3 | 2 | |
10 | 5 | 4 | 2 |
Verschiedene Maße führen nicht nur zu verschiedenen Werten, sondern auch zu unterschiedlichen Einschätzungen, welche Eingaben geordneter sind als andere.
Weitere Maße sind zum Beispiel zu finden in [2].
Übersicht
Nicht bei allen der hier aufgeführten Algorithmen ist die Laufzeit als Funktion des Ordnungsmaßes angegeben. Allerdings hat man die Hoffnung, dass in Fällen von großer Ordnung in der Eingabe die Laufzeit noch nahe am Best-Case ist, wodurch es gerechtfertigt ist, diese Algorithmen hier aufzuführen.
Sortierverfahren | Laufzeit |
---|---|
A-Sort[3] | (optimal)[4][5] |
Adaptive Heap Sort | [6] |
AVL Sort | [7] |
Natural Mergesort | [8] |
Patience Sorting | Best-Case: , bei sortierter Eingabe. Average-Case [9] |
Randomisierter Quicksort | [10] |
Shellsort | Best-Case: , bei sortierter Eingabe. Average-Case nicht in .[11] |
Smoothsort | für sortierte Eingaben. Erreicht nicht.[12] Worst-Case: |
Splaysort | In Experimenten ab einer bestimmten Ordnung in der Eingabe schneller als Randomisierter Quicksort und AVL Sort.[13] |
Straight Insertion Sort | [4] |
Timsort | .[14] Worst-Case: [15] |
Beispiel
Straight Insertion Sort
Straight Insertion Sort ist eine Abwandlung von Insertion Sort. Der Unterschied zwischen Insertion Sort und Straight Insertion Sort ist, dass bei Insertion Sort die Reihenfolge, in der das bereits Sortierte Array durchlaufen wird, beliebig gewählt werden kann, während bei Straight Insertion Sort vom größten Index zum kleinsten gesucht werden muss. Im Fall einer fast sortierten Eingabe wird so die while-Schleife selten durchlaufen.
Eingabe: Array X der Länge n
for j:= 2 to n do
t := X[j]
i := j
while i > 1 & X[i - 1] > t do
X[i] := X[i - 1]
i := i - 1
end
X[i] := t
end
Die Laufzeit von Straight Insertion Sort ist in [4]. Damit hat Straight Insertion Sort auf einer bereits Sortierten Eingabe die minimale Laufzeit ; um eine Liste auf Sortiertheit zu prüfen, muss jedes Element mindestens einmal betrachtet werden.
Einzelnachweise
- ↑ a b O. Petersson, A. Moffat: A framework for adaptive sorting. 1992, S. 155+156.
- ↑ V. Estivill-Castro, D. Wood: A Survey of Adaptive Sorting Algorithms. 1992, I.2.
- ↑ K. Mehlhorn: Sorting Presorted Files. 1978, S. 11.
- ↑ a b c O. Petersson, A. Moffat: A framework for adaptive sorting. 1992, S. 165.
- ↑ G. Stolting, Chapman & Hall/CRC Computer and Information Science Series.Handbook of Data Structures and Applications, 2005, S.11-8.
- ↑ S. Edelkamp, A. Elmasry, J. Katajainen.Combinatorial Algorithms: 22th International Workshop: Two Constant-Factor-Optimal Realizations of Adaptive Heapsort, 2011, S.197.
- ↑ A. Elmasry. Adaptive sorting with AVL trees., 2004, S.309.
- ↑ Natural Mergesort. In: FH Flensburg. Abgerufen am 20. Juli 2019.
- ↑ Patience is a Virtue: Revisiting Merge and Sorton Modern Processors. Abgerufen am 30. Juli 2019.
- ↑ G. Brodal, R. Fagerberg and G. Moruz. On the adaptiveness of quicksort., 2005, S.3.
- ↑ C. Plaxton, B. Poonen, T. Suel, Improved Lower Bounds for Shellsort. 1992, S. 9.
- ↑ Smoothsort's behavior on presorted sequences. Abgerufen am 30. Juli 2019.
- ↑ A. Elmasry, A. Hammad. An Empirical Study for Inversions-Sensitive Sorting Algorithms., 2005, S.597.
- ↑ N. Auger, V. Jugé, C. Nicaud, C. Pivoteau. On the Worst-Case Complexity of TimSort., 2012, S.4:8.
- ↑ N. Auger, V. Jugé, C. Nicaud, C. Pivoteau. On the Worst-Case Complexity of TimSort., 2012, S.4:4.