Kapitel 4: Ausgewählte Datenstrukturen Gliederung 1. 2. 3. 4. 5. 6. 7. 8. 9. 4/2, Folie 1 Grundlagen Zahlentheoretische Algorithmen Sortierverfahren Ausgewählte Datenstrukturen Dynamisches Programmieren Graphalgorithmen String-Matching Kombinatorische Algorithmen Lineare Programmierung © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Einordnung zur Erinnerung ... effiziente Realisierung der zur Verwaltung von sich dynamisch ändernden Datenbeständen typischen Operationen • • Verwendung von binären Suchbäumen, um die Idee der binären Suche zu realisieren (/* Suchen, Löschen und Einfügen gehen in O(tiefe(B)) */) Einschränkung auf höhenbalancierte binäre Suchbäume, um die Operationen effizienter zu realisieren (/* tiefe(B) ∈ O(log(n)), wobei n die Anzahl der Knoten in B bezeichnet */) ... die Operationen Suchen, Einfügen und Löschen benötigen im „worst case“ jeweils die Zeit O(log(n)) 4/2, Folie 2 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Einordnung prominente Beispiele • • • AVL-Bäume B-Bäume ... • • 4/2, Folie 3 Anforderungen an die Struktur festlegen, damit sicher gestellt ist, daß tiefe(B) ∈ O(log(n)) gilt die Operationen Einfügen und Löschen so realisieren, daß die Anforderungen an die Struktur auch nach Ausführung der Operation erfüllt sind (/* Invariante 1 */) und die Anforderungen an die Ordnung erfüllt sind (/* Invariante 2 */) © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume informelle Beschreibung Ein binärer Suchbaum heißt AVL-Baum, wenn für jeden Knoten gilt, daß sich die Tiefe seines linken und seines rechten Teilbaums um maximal 1 unterscheiden. Begriff - Balancegrad k TBL 4/2, Folie 4 © 2013 Prof. Steffen Lange b(k) = tiefe(TBL) - tiefe(TBR) TBR - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume Anmerkung zur Repräsentation • 4/2, Folie 5 jeder Knoten enthält maximal fünf Informationen • einen Schlüssel • seinen Balancegrad (/* für die Operationen Einfügen und Löschen wichtig */) • max. einen Verweis auf den Vater (/* fehlt für die Wurzel */) • max. zwei Verweise auf die Söhne (/* diese können auch fehlen */) © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume Beispiel 5/-1 3/0 1/0 8/1 4/0 6/-1 9/0 7/0 4/2, Folie 6 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume Anmerkung zur Operation Suchen ... die Operation Suchen wird wie üblich in binären Suchbäumen realisiert 4/2, Folie 7 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen zugrunde liegende Idee • • • 4/2, Folie 8 findet in 2 Phasen statt Phase 1 • Operation Einfügen, wie man sie für normale binäre Suchbäume kennt, ausführen (/* es wird auf „Blattebene“ eingefügt; Invariante 2 erfüllt */) Phase 2 • dem Pfad von dem neuen Blatt zur Wurzel folgen • im aktuell besuchten Knoten ist der Balancegrad anzupassen (/* dazu muß man die Balancegrad der Söhne kennen */) • falls der Balancegrad auf 2 bzw. -2 geändert wird, ist der Baum erst zu modifizieren und dann wird gestoppt • sonst wird der nächste Knoten auf dem Weg zur Wurzel besucht (/* falls es keinen nächsten Knoten gibt, wird gestoppt */) © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration x = 1 in den leeren Baum einfügen 1/0 4/2, Folie 9 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) x = 2 in den linken Baum einfügen 1/0 1/-1 2/0 4/2, Folie 10 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) 1/-2 x = 3 in den linken Baum einfügen 2/-1 1/-1 3/0 2/0 2/0 1/0 4/2, Folie 11 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen 3/0 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) x = 5 in den linken Baum einfügen 2/-1 2/0 1/0 1/0 3/0 3/-1 5/0 4/2, Folie 12 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) x = 6 in den linken Baum einfügen 2/-1 2/-1 1/0 1/0 3/-1 3/-2 5/-1 5/0 6/0 4/2, Folie 13 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) LinksRotation 2/-1 1/0 2/-1 3/-2 1/0 5/-1 3/0 6/0 4/2, Folie 14 © 2013 Prof. Steffen Lange - HDa/FbI 5/0 - Effiziente Algorithmen 6/0 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) x = 4 in den linken Baum einfügen 2/-1 1/0 2/-2 1/0 5/0 3/0 6/0 5/1 3/-1 6/0 4/0 4/2, Folie 15 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) ... nicht wirklich gut !!! 5/2 2/-2 1/0 2/-2 5/1 3/-1 1/0 6/0 © 2013 Prof. Steffen Lange - 3/-1 4/0 4/0 4/2, Folie 16 6/0 HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) RechtsRotation 2/-2 1/0 2/-2 1/0 5/1 3/-1 6/0 5/0 4/0 4/2, Folie 17 © 2013 Prof. Steffen Lange 3/-2 - 4/0 HDa/FbI - Effiziente Algorithmen 6/0 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Illustration (cont.) anschließende LinksRotation 2/-2 1/0 3/0 3/-2 2/1 1/0 5/0 6/0 4/0 4/2, Folie 18 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen 5/0 4/0 6/0 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen allgemein zu den Rotationen (/* auch fürs Löschen wichtig */) • • 4/2, Folie 19 falls der Balancegrad auf 2 bzw. -2 geändert wird, ist der Baum lokal zu modifizieren (/* welche und wie viele Rotationen durchzuführen sind, ist durch den Balancegrade der Söhne determiniert */) bei der Rotation müssen die Balancegrade der Söhne und ggf. der Enkel angepaßt werden © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Linksrotation - Version 1 (/* gibt es auch als Rechtsrotation */) LinksRotation k/-2 k‘/-1 k‘/0 k/0 k‘‘/-1 4/2, Folie 20 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen k‘‘/-1 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Linksrotation - Version 2 (/* gibt es auch als Rechtsrotation */) LinksRotation k/-2 k‘/-1 k‘/0 k/0 k‘‘/1 4/2, Folie 21 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen k‘‘/1 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Doppelrotation - Version 1 (/* gibt es auch mit einer Linksrotation beginnend */) RechtsRotation k/-2 k‘‘/-2 k‘/1 k‘/0 k‘‘/-1 4/2, Folie 22 © 2013 Prof. Steffen Lange k/-2 - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Doppelrotation - Version 1 (/* cont. */) LinksRotation k/-2 k‘‘/-2 k‘‘/0 k/1 k‘/0 4/2, Folie 23 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen k‘/0 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Doppelrotation - Version 2 (/* gibt es auch mit einer Linksrotation beginnend */) RechtsRotation k/-2 k‘‘/-1 k‘/1 k‘/0 k‘‘/1 4/2, Folie 24 © 2013 Prof. Steffen Lange k/-2 - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Doppelrotation - Version 2 (/* cont. */) LinksRotation k‘‘/0 k/-2 k/1 k‘‘/-1 k‘/0 4/2, Folie 25 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen k‘/-1 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Einfügen Anmerkungen zum Einfügen • • Phase 1 • wie in üblichen Suchbäumen (/* geht in Zeit O(tiefe(B)) */) Phase 2 • Balancegrade anpassen, bis Wurzel erreicht oder bis der Balancegrad auf 2 bzw. -2 geändert wurde (/* geht in Zeit O(tiefe(B)) */) • falls Balancegrad auf 2 bzw. -2 geändert wird, sind im „worst case“ 2 Rotationen fällig (/* geht in Zeit O(1), da nur lokale Änderungen nötig sind */) ... die Operation Einfügen benötigt im „worst case“ die Zeit O(log(n)), wobei n die Anzahl der Knoten im Baum B bezeichnet (/* es gilt tiefe(B) ∈ O(log(n)) */) 4/2, Folie 26 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Löschen zugrunde liegende Idee • • • 4/2, Folie 27 findet in 2 Phasen statt Phase 1 • Operation Löschen, wie man sie für normale binäre Suchbäume kennt, ausführen (/* die Idee der symmetrischen Nachfolger berücksichtigen; Invariante 2 erfüllt */) Phase 2 • dem Pfad vom Vater des gestrichenen Knotens zur Wurzel folgen • im aktuell besuchten Knoten ist der Balancegrad anzupassen (/* dazu muß man die Balancegrad der Söhne kennen */) • falls der Balancegrad auf 2 bzw. -2 geändert wird, ist der Baum zu modifizieren (/* analog zum Einfügen */) und der nächste Knoten auf dem Weg zur Wurzel ist zu besuchen (/* anders als beim Einfügen */) • sonst wird gleich der nächste Knoten auf dem Weg zur Wurzel besucht (/* falls es keinen nächsten Knoten gibt, wird gestoppt */) © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Löschen Illustration (/* Löschen von x = 5 */) 9/-1 6/-1 5/0 18/1 8/1 14/0 7/0 11/0 19/-1 16/-1 20/0 17/0 4/2, Folie 28 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Löschen Illustration (/* Löschen von x = 5, cont. */) 9/-1 6/-2 18/1 8/1 14/0 7/0 11/0 19/-1 16/-1 20/0 17/0 4/2, Folie 29 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Löschen Illustration (/* Löschen von x = 5, cont. */) 9/-2 7/0 6/0 18/1 8/0 14/0 11/0 19/-1 16/-1 20/0 17/0 4/2, Folie 30 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Löschen Illustration (/* Löschen von x = 5, cont. */) 9/-2 7/0 6/0 14/-1 8/0 11/0 18/0 16/-1 19/-1 17/0 4/2, Folie 31 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen 20/0 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Löschen Illustration (/* Löschen von x = 5, cont. */) 14/0 9/1 7/0 6/0 4/2, Folie 32 18/0 11/0 16/-1 8/0 © 2013 Prof. Steffen Lange 19/-1 17/0 - HDa/FbI - Effiziente Algorithmen 20/0 Kapitel 4: Ausgewählte Datenstrukturen AVL-Bäume - Operation Löschen Anmerkungen zum Löschen • • Phase 1 • wie in üblichen Suchbäumen (/* geht in Zeit O(tiefe(B)) */) Phase 2 • insgesamt müssen die Balancegrade aller Knoten auf dem Weg zur Wurzel angepaßt werden und im „worst case“ je besuchten Knoten zwei Rotationen ausgeführt werden • Balancegrade anpassen (/* geht in Zeit O(1), da nur lokale Änderungen nötig sind */) • falls Balancegrad auf 2 bzw. -2 geändert wird, sind im worst case 2 Rotationen fällig (/* geht in Zeit O(1), da nur lokale Änderungen nötig sind */) ... die Operation Löschen benötigt im „worst case“ die Zeit O(log(n)), wobei n die Anzahl der Knoten im Baum B bezeichnet (/* es gilt tiefe(B) ∈ O(log(n)) */) 4/2, Folie 33 © 2013 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen