algorithm engineering schnelles sortieren stefan edelkamp

55
Algorithm Engineering „Schnelles Sortieren“ Stefan Edelkamp

Upload: odelia-schlosser

Post on 06-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Algorithm Engineering „Schnelles Sortieren“

Stefan Edelkamp

Page 2: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Überblick

Kriterien für Sortierverfahren State-of-the-Art Clever-Quicksort Heapsort Weak-Heapsort Quick-Heapsort Radix-Exchange-Sort Sortieren durch Fachverteilung

Page 3: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Kriterien für Sortierverfahren

Page 4: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

State-of-the-Art

Page 5: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

State-of-the-Art (2)

Page 6: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

State-of-the-Art (3)

Page 7: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Clever-Quicksort (Median-of-3)

Page 8: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Clever-Quicksort (Median-of-3)

Σ

Page 9: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

ImplementierungSiehe Sedgewick: The analysis of quicksortprograms, Acta Informatica, Journal of Algorithms,15(1):76-100, 1993

Page 10: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Heapsort

Page 11: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Definition

Page 12: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Veranschaulichung

Page 13: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Entfernen des Maximums

Page 14: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Versickern

Page 15: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code

Page 16: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Erstellung eines Heaps

Page 17: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Äußere Schleife

Page 18: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Analyse Iteriertes Versickern

Σ

Page 19: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Analyse

Page 20: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Beobachtung

Page 21: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Bottom-Up-Heapsort

Page 22: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code (1)

Page 23: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code (2)

Page 24: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Worst-Case

Page 25: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Average Case

Page 26: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Weak-Heap-Sort

Page 27: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Verschmelzen

Page 28: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Generiereneines Weak-Heaps

Page 29: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Sortierung

Page 30: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Arrayeinbettung

Page 31: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

3 Fälle

Page 32: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

PseudoCode

Page 33: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Analyse

Σ

Page 34: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Engineering

Page 35: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Quick-Heapsort

Page 36: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Quick-Heapsort

ΣΣ

Page 37: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code

Page 38: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code (2)

Page 39: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code (3)

Page 40: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Radix-Sort

Page 41: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Radix-Exchange-Sort

Page 42: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Beispiel

Page 43: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

UnterscheidenePräfixe

Page 44: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Analyse

Page 45: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Sortieren durch Fachverteilen

Page 46: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Analyse

Page 47: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Illustration

Page 48: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code (1)

Page 49: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Pseudo-Code (2)

Page 50: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Adaptives Sortieren

Inversionen

Inv(X) = {(i,j) | 1 <= i < j <= n und xi > xj}

Ziel AE:

1*n log (Inv(X)/n)+O(n)

Wenn Inv(X) = O(n²) n log n + O(n)

Inversions-optimal

:= Laufzeit O(n log (Inv(X)/n)+n)

Informationstheoretische

Grenze: Ω(n log (Inv(X)/n)+n)

Page 51: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Kartesischer Baum

Der kartesische Baum TF

von F[1..n] ist ein geordneter „gewurzelter“ Baum mit n Knoten.

Der kartesische Baum des leeren Feldes ist der leere Baum. Sei k = min (1,n).

Die Wurzel von TF ist markiert mit k, die Kinder sind die kartesischen Bäume von

F[1..k −1] und F[k+1..n] (wobei F[i..j] das leere Feld ist, falls j < i).

Page 52: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Konstruktion (a la wikipedia)

Process the sequence values in left-to-right order, maintaining the Cartesian tree of the nodes processed so far, in a structure that allows both upwards and downwards traversal of the tree.

To process each new value x, start at the node representing the value prior to x in the sequence and follow the path from this node to the root of the tree until finding a value y smaller than x. This node y is the parent of x, and the previous right child of y becomes the new left child of x.

The total time for this procedure is linear, because the time spent searching for the parent y of each new node x can be charged against the number of nodes that are removed from the rightmost path in the tree

Page 53: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Levcopoulos–Petersson Algorithmus

Konstruiere Karteschen Baums für die Eingabe Initialisiere PQ mit der Wurzel des kartesischen Baumes Solange PQ nicht leer:

1. Finde und lösche den min. Wert x in PQ (DeleteMin)

2. Gebe x aus

3. Füge die Kinder von x im kartesischen Baum zu PQ hinzu (Insert)

Page 54: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Zeit

Page 55: Algorithm Engineering Schnelles Sortieren Stefan Edelkamp

Vergleiche