Algorithmen und Datenstrukturen 11. Übung Verkettete Listen, Sortieren Insertionsort, Mergesort, Radixsort, Quicksort Clemens Lang Übungen zu AuD 19. Januar 2010 Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 1 / 10
Organisatorisches Endspurt: Noch 3 Übungsblätter Evaluation: Hat jemand noch keine TAN? Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 2 / 10
Verkettete Liste (engl. Linked List) (11.1) Funktion Datenstruktur zum Verwalten (komplexer) Daten Vorteile flexible Größe einfache Struktur und Verwendung (z.b. Einfügen und Löschen in der Mitte) Nachteil Kein wahlfreier Zugriff (durchschnittlicher Zugriff dauert O(n)) Idee Einträge der Liste haben jeweils Referenz auf nächstes Element Schematische Darstellung Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 3 / 10
Verkettete Liste (engl. Linked List) (11.1) Funktion Datenstruktur zum Verwalten (komplexer) Daten Vorteile flexible Größe einfache Struktur und Verwendung (z.b. Einfügen und Löschen in der Mitte) Nachteil Kein wahlfreier Zugriff (durchschnittlicher Zugriff dauert O(n)) Idee Einträge der Liste haben jeweils Referenz auf nächstes Element Schematische Darstellung Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 3 / 10
Linked List Operationen (11.1) mögliche Operationen Einfügen am Anfang in der Mitte am Ende Löschen vgl. Einfügen Suchen Durchlaufen der Liste Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 4 / 10
Sortieren Laufzeit (überlicherweise angegeben im best-, worst- und average case) Platzbedarf in-place (auch: in situ) out-of-place (Angabe in O-Notation) Stabilität: gleichwertige Elemente sind nach dem Sortieren noch in der gleichen Reihenfolge Insertionsort Radixsort Mergesort Quicksort Bubblesort Heapsort Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 5 / 10
Insertionsort (dt. Sortieren durch Einfügen) (11.1) Verfahren 1 Suche richtige Stelle zum Einfügen 2 Füge Element an der Stelle ein Verschiebe dabei nachfolgende Elemente nach hinten Beispiel: 3 10 5 1 19 / : best O(n) average O(n 2 ) worst O(n 2 ) Stabilität: möglich Platzbedarf: in-place (möglich) Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 6 / 10
Insertionsort (dt. Sortieren durch Einfügen) (11.1) Verfahren 1 Suche richtige Stelle zum Einfügen 2 Füge Element an der Stelle ein Verschiebe dabei nachfolgende Elemente nach hinten Beispiel: 3 10 5 1 19 / : best O(n) average O(n 2 ) worst O(n 2 ) Stabilität: möglich Platzbedarf: in-place (möglich) Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 6 / 10
Insertionsort (dt. Sortieren durch Einfügen) (11.1) Verfahren 1 Suche richtige Stelle zum Einfügen 2 Füge Element an der Stelle ein Verschiebe dabei nachfolgende Elemente nach hinten Beispiel: 3 10 5 1 19 / : best O(n) average O(n 2 ) worst O(n 2 ) Stabilität: möglich Platzbedarf: in-place (möglich) Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 6 / 10
Radixsort (11.2, 11.3) Verfahren 1 Betrachte eine Stelle/ein Zeichen, beginne am rechten Zeichen 2 Sortiere alle Elemente nach dem Zeichen an der betrachteten Stelle in Fächer (engl. Buckets) 3 Konkateniere Inhalt der Buckets in ihrer sortierten Reihenfolge 4 Setze Verfahren mit der nächsten Stelle fort Beispiel Postleitzahlen: 96173 91052 90573 81539 91058 10008 Mit k Stellen und n Elementen: O(k n) Für konstantes k sehr schnell! Stabil quasi per Definition Platzbedarf O(k) nicht vergleichsbasiert Nachteil: Alphabet muss bekannt sein Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 7 / 10
Radixsort (11.2, 11.3) Verfahren 1 Betrachte eine Stelle/ein Zeichen, beginne am rechten Zeichen 2 Sortiere alle Elemente nach dem Zeichen an der betrachteten Stelle in Fächer (engl. Buckets) 3 Konkateniere Inhalt der Buckets in ihrer sortierten Reihenfolge 4 Setze Verfahren mit der nächsten Stelle fort Beispiel Postleitzahlen: 96173 91052 90573 81539 91058 10008 Mit k Stellen und n Elementen: O(k n) Für konstantes k sehr schnell! Stabil quasi per Definition Platzbedarf O(k) nicht vergleichsbasiert Nachteil: Alphabet muss bekannt sein Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 7 / 10
Radixsort (11.2, 11.3) Verfahren 1 Betrachte eine Stelle/ein Zeichen, beginne am rechten Zeichen 2 Sortiere alle Elemente nach dem Zeichen an der betrachteten Stelle in Fächer (engl. Buckets) 3 Konkateniere Inhalt der Buckets in ihrer sortierten Reihenfolge 4 Setze Verfahren mit der nächsten Stelle fort Beispiel Postleitzahlen: 96173 91052 90573 81539 91058 10008 Mit k Stellen und n Elementen: O(k n) Für konstantes k sehr schnell! Stabil quasi per Definition Platzbedarf O(k) nicht vergleichsbasiert Nachteil: Alphabet muss bekannt sein Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 7 / 10
Radixsort (11.2, 11.3) Verfahren 1 Betrachte eine Stelle/ein Zeichen, beginne am rechten Zeichen 2 Sortiere alle Elemente nach dem Zeichen an der betrachteten Stelle in Fächer (engl. Buckets) 3 Konkateniere Inhalt der Buckets in ihrer sortierten Reihenfolge 4 Setze Verfahren mit der nächsten Stelle fort Beispiel Postleitzahlen: 96173 91052 90573 81539 91058 10008 Mit k Stellen und n Elementen: O(k n) Für konstantes k sehr schnell! Stabil quasi per Definition Platzbedarf O(k) nicht vergleichsbasiert Nachteil: Alphabet muss bekannt sein Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 7 / 10
Mergesort (dt. Sortieren durch Mischen) (11.4, 11.5) Verfahren: Divide and Conquer 1 Teile Menge in gleich große Teilmengen 2 Sortiere Teilmengen rekursiv 3 Verschmelze Teilmengen Kein wahlfreier Zugriff nötig Anwendung auf verketteten Listen Beispiel: 89 5 40 84 20 95 7 14 85 O(n log n) Stabil: möglich Platzbedarf: auf verketteten Listen in-place Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 8 / 10
Mergesort (dt. Sortieren durch Mischen) (11.4, 11.5) Verfahren: Divide and Conquer 1 Teile Menge in gleich große Teilmengen 2 Sortiere Teilmengen rekursiv 3 Verschmelze Teilmengen Kein wahlfreier Zugriff nötig Anwendung auf verketteten Listen Beispiel: 89 5 40 84 20 95 7 14 85 O(n log n) Stabil: möglich Platzbedarf: auf verketteten Listen in-place Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 8 / 10
Mergesort (dt. Sortieren durch Mischen) (11.4, 11.5) Verfahren: Divide and Conquer 1 Teile Menge in gleich große Teilmengen 2 Sortiere Teilmengen rekursiv 3 Verschmelze Teilmengen Kein wahlfreier Zugriff nötig Anwendung auf verketteten Listen Beispiel: 89 5 40 84 20 95 7 14 85 O(n log n) Stabil: möglich Platzbedarf: auf verketteten Listen in-place Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 8 / 10
Mergesort (dt. Sortieren durch Mischen) (11.4, 11.5) Verfahren: Divide and Conquer 1 Teile Menge in gleich große Teilmengen 2 Sortiere Teilmengen rekursiv 3 Verschmelze Teilmengen Kein wahlfreier Zugriff nötig Anwendung auf verketteten Listen Beispiel: 89 5 40 84 20 95 7 14 85 O(n log n) Stabil: möglich Platzbedarf: auf verketteten Listen in-place Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 8 / 10
Quicksort (12.3) Verfahren 1 Wähle Pivotelement p 2 Trenne Elemente < p von Elementen > p 3 Tausche Pivot zwischen die beiden Teillisten 4 Verfahre Rekursiv mit den Teillisten Beispiel: 9 2 8 4 3 12 23 1 best O(n log n) average O(n log n) worst O(n 2 ) a nicht stabil in-place a ironischerweise bei vorsortierter Eingabe ;) Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 9 / 10
Quicksort (12.3) Verfahren 1 Wähle Pivotelement p 2 Trenne Elemente < p von Elementen > p 3 Tausche Pivot zwischen die beiden Teillisten 4 Verfahre Rekursiv mit den Teillisten Beispiel: 9 2 8 4 3 12 23 1 best O(n log n) average O(n log n) worst O(n 2 ) a nicht stabil in-place a ironischerweise bei vorsortierter Eingabe ;) Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 9 / 10
Quicksort (12.3) Verfahren 1 Wähle Pivotelement p 2 Trenne Elemente < p von Elementen > p 3 Tausche Pivot zwischen die beiden Teillisten 4 Verfahre Rekursiv mit den Teillisten Beispiel: 9 2 8 4 3 12 23 1 best O(n log n) average O(n log n) worst O(n 2 ) a nicht stabil in-place a ironischerweise bei vorsortierter Eingabe ;) Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 9 / 10
Quicksort (12.3) Verfahren 1 Wähle Pivotelement p 2 Trenne Elemente < p von Elementen > p 3 Tausche Pivot zwischen die beiden Teillisten 4 Verfahre Rekursiv mit den Teillisten Beispiel: 9 2 8 4 3 12 23 1 best O(n log n) average O(n log n) worst O(n 2 ) a nicht stabil in-place a ironischerweise bei vorsortierter Eingabe ;) Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 9 / 10
Ende Guten Appetit! Teufelspfanne mit Rindfleisch und Reis, scharf 2,20 Putenrollbraten mit Estragonsoße 1,80 Blumenkohl-Käse-Medaillon mit Schnittlauch-Dip 1,50 Clemens Lang (Übungen zu AuD) Algorithmen und Datenstrukturen 19. Januar 2010 10 / 10