Kapitel 4: Bäume / Graphen Gliederung 1. 2. 3. 4. 5. 6. 4/3, Folie 1 Motivation / Grundlagen Sortierverfahren Elementare Datenstrukturen / Anwendungen Bäume / Graphen Hashing Algorithmische Geometrie © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen Suchbäume und Blattsuchbäume Suchbäume (/* ein „etwas“ anderer Blick */) ... Schlüssel befinden sich in den inneren Knoten ... Ordnungsprinzip 3 5 7 9 10 12 18 9 5 3 4/3, Folie 2 © 2010 Prof. Steffen Lange - HDa/FbI - 12 7 Datenstrukturen 10 18 Kapitel 4: Bäume / Graphen Suchbäume und Blattsuchbäume Blattsuchbäume ... Schlüssel befinden sich in den Blättern ... innere Knoten enthalten nur „Wegweiser“ ... Ordnungsprinzip 3 5 7 9 10 12 18 18 9 18 5 3 4/3, Folie 3 © 2010 Prof. Steffen Lange - HDa/FbI - 9 5 Datenstrukturen 7 18 12 9 10 12 Kapitel 4: Bäume / Graphen Suchbäume und Blattsuchbäume zugrunde liegende Idee der unterschiedlichen Ansätze • man verwendet (/* nicht notwendigerweise binäre !!! */) so genannte höhenbalancierte Suchbäume bzw. Blattsuchbäume, d.h. Such- bzw. Blattsuchbäume, für die a) oder b) gilt: a) b) 4/3, Folie 4 alle Blätter haben dieselbe Tiefe die Tiefe aller Blätter unterscheidet sich nur unwesentlich (/* üblicherweise: +/- 1 */) © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen Suchbäume und Blattsuchbäume Beispiele für höhenbalancierte Suchbäume • • • AVL-Bäume B-Bäume ... Beispiele für höhenbalancierte Blattsuchbäume • • 2-3-Bäume ... ... Blattsuchbäume haben den Vorteil, daß neben den üblichen Dictionary-Operationen auch so genannte Bereichsanfragen „effizient“ realisiert werden können (/* man sucht alle verwalteten Schlüssel, die in einem interessierenden Bereich liegen */) 4/3, Folie 5 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen 2-3-Bäume Grundidee • eine Art von höhenbalancierten Blattsuchbäumen, wobei sicher gestellt wird, daß alle Blätter dieselbe Tiefe haben (/* damit können 2-3-Bäume keine Binärbäume sein */) 14 5 3 4/3, Folie 6 © 2010 Prof. Steffen Lange - 9 5 HDa/FbI 7 - 14 9 10 Datenstrukturen 12 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Eigenschaften von 2-3-Bäumen a) b) c) d) jeder innere Knoten hat mindestens zwei und höchstens drei Söhne alle Blätter haben dieselbe Tiefe jedes Blatt enthält einen Schlüssel, wobei die Schlüssel den Blättern in aufsteigender Reihenfolge von links nach rechts zugewiesen sind jeder innere Knoten enthält den Schlüssel, der im rechtesten Blatt des an diesem Knoten beginnenden Teilbaums gespeichert ist 14 5 3 9 5 7 14 9 10 12 14 ... c) und d) sind üblich; a) und b) sind spezifisch 4/3, Folie 7 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen 2-3-Bäume Konsequenz da alle inneren Knoten in einem 2-3-Baum B mindestens zwei Söhne haben gilt ... Jeder 2-3-Baum B mit n Blättern hat eine Tiefe ≤ log(n). 4/3, Folie 8 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Suchen - beginne bei der Wurzel es seien y1, y2 und y3 die in den Söhnen gespeicherten Schlüssel falls die Söhne Blätter sind, so prüfe, ob x = y1, x = y2 bzw. x = y3 gilt falls ja, stoppe und gib „gefunden“ zurück (/* falls nein, so stoppe beim Sohn mit dem Schlüssel y1 (/* y1 > x */), beim Sohn mit dem Schlüssel y2, (/* y2 > x */), bzw. y3 (/* sonst */) und gib „nicht gefunden“ zurück */) falls die Söhne keine Blätter sind, gehe wie folgt vor: falls x ≤ y1, so suche rekursiv im linken Teilbaum weiter falls y1 < x ≤ y2, so suche im mittleren Teilbaum weiter falls y2 < x, so suche im rechten Teilbaum weiter ... falls nur zwei Söhne vorhanden sind analog ... komplizierter als nötig; das ist für die anderen Operationen wichtig 4/3, Folie 9 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Einfügen (/* Beispiel */) Einfügen von 14 ... 12 5 3 12 9 5 7 12 9 10 5 12 9 5 3 7 12 9 10 12 14 5 3 4/3, Folie 10 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen 9 5 7 14 9 10 12 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Einfügen (/* Beispiel */) Einfügen von 13 ... 14 14 5 3 9 5 7 5 14 9 10 12 14 9 5 3 14 7 9 10 14 12 14 5 3 4/3, Folie 11 © 2010 Prof. Steffen Lange - HDa/FbI - 9 5 Datenstrukturen 7 14 9 10 12 13 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Einfügen (/* Beispiel */) Einfügen von 13 ... 14 5 3 14 9 5 7 14 9 10 12 5 14 9 5 3 14 7 9 10 12 14 13 14 5 3 4/3, Folie 12 © 2010 Prof. Steffen Lange - HDa/FbI - 9 5 Datenstrukturen 7 12 9 10 14 12 13 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Einfügen (/* Beispiel */) Einfügen von 13 ... 14 5 3 14 9 5 7 5 14 9 10 12 14 5 3 12 9 7 9 10 14 9 14 5 3 Hinweis: Einfügen von 13 © 2010 Prof. Steffen Lange 4/3, Folie 13 - HDa/FbI - 12 9 5 Datenstrukturen 14 13 12 7 9 10 14 12 13 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Einfügen (/* Beispiel */) Einfügen von 13 ... 9 14 5 3 9 5 7 5 14 9 10 12 14 14 3 9 5 12 9 7 14 12 10 14 13 14 9 14 5 3 4/3, Folie 14 © 2010 Prof. Steffen Lange - HDa/FbI - 9 5 Datenstrukturen 7 12 9 10 14 12 13 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Einfügen (/* allgemein */) - 4/3, Folie 15 suche den Schlüssel x und markiere die besuchten inneren Knoten bestimme den Vater v des Blatts, bei dem bei der Suche gestoppt wurde, und füge links bzw. rechts davon ein Blatt mit dem Schlüssel x ein falls v drei Söhne hat, so folge dem Weg zur Wurzel und passe die Schlüssel an falls v vier Söhne hat, so spalte v in zwei innere Knoten, passe die Schlüssel dieser neuen Knoten an und mache beide Knoten zu Söhnen des Vaters v‘ von v; anschließend gehe zu v‘ (/* falls v‘ gar nicht existiert, neue Wurzel erzeugen */) falls v‘ drei Söhne hat, folge dem Weg zur Wurzel und passe die Schlüssel an falls v‘ vier Söhne hat, setze rekursiv fort © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Löschen (/* Beispiel */) Löschen von 9 ... 14 5 3 14 9 5 7 14 9 10 12 5 14 9 5 3 7 14 9 10 12 14 14 5 3 4/3, Folie 16 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen 10 5 7 14 10 12 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Löschen (/* Beispiel */) Löschen von 5 ... 14 14 5 3 10 5 7 5 14 10 12 3 14 10 5 14 10 7 14 12 14 10 3 4/3, Folie 17 © 2010 Prof. Steffen Lange - HDa/FbI - 7 Datenstrukturen 14 10 12 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Löschen (/* Beispiel */) Löschen von 10 ... 14 14 10 3 7 10 14 10 12 14 3 7 14 10 14 12 14 7 3 4/3, Folie 18 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen 14 7 12 14 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Löschen (/* Beispiel */) Löschen von 14 ... 14 14 7 3 7 14 7 12 3 14 14 7 14 12 14 12 3 4/3, Folie 19 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen 7 12 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Löschen (/* Beispiel */) Löschen von 14 ... 14 14 7 3 12 14 7 12 3 14 7 12 12 3 4/3, Folie 20 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen 7 12 Kapitel 4: Bäume / Graphen 2-3-Bäume Operation – Löschen (/* allgemein */) - 4/3, Folie 21 suche den Schlüssel x und markiere die besuchten inneren Knoten bestimme den Vater v des Blatts mit dem Schlüssel x und lösche dieses Blatt falls v zwei Söhne hat, so folge dem Weg zur Wurzel und passe die Schlüssel an falls v einen Sohn hat, prüfe ob ein Bruder von v drei Söhne hat falls ja, stehle einen Sohn vom Bruder, mache ihn zu einem Sohn von v, folge dem Weg zur Wurzel und passe die Schlüssel an falls nein, verschmelze v mit einem seiner Brüder, passe den Schlüssel von v an und gehe zum Vater v‘ von v falls v‘ zwei Söhne hat, folge dem Weg zur Wurzel und passe die Schlüssel an falls v‘ einen Sohn hat, setze rekursiv fort (/* falls v‘ die Wurzel ist, so lösche v‘ */) © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen 2-3-Bäume Zusammenfassung • • jede der Operation Suchen, Einfügen und Löschen benötigt im „worst case“ in einem 2-3-Baum die Zeit O(t), wobei t die Tiefe des Baums angibt jeder 2-3 Baum B mit n Blättern hat eine Tiefe t ≤ log(n) ... also gehen alle Operationen im „worst case“ in Zeit O(log(n)) 4/3, Folie 22 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 4: Bäume / Graphen 2-3-Bäume und Bereichsanfragen Aufgabenstellung • in bestimmte Anwendungen von 2-3-Bäumen (/* siehe später */) ist es interessant zu wissen, welche Schlüssel eines gegebenen Intervalls [a,e] im Baum B gespeichert sind Lösungsansatz ... „organisiere“ die Blätter als doppelt verkettete Liste 16 9 16 5 3 4/3, Folie 23 9 5 © 2010 Prof. Steffen Lange 7 - 12 9 HDa/FbI 10 - 16 12 Datenstrukturen 14 15 16 Kapitel 4: Bäume / Graphen 2-3-Bäume und Bereichsanfragen Realisierung einer Bereichsanfrage 1. 2. 3. suche nach x = a (/* bei Blatt ba stoppt die Suche */) suche nach x = e (/* bei Blatt be stoppt die Suche */) gib „alle“ Schlüssel in der Liste aus, die in ba beginnt und in be endet (/* für den Schlüssel be wird separat geprüft, ob e = be gilt */) 17 a = 6, b = 14 9 17 5 3 12 9 5 7 9 10 17 12 13 15 17 ... geht im „worst case“ in Zeit O(t+k), wobei t die Tiefe des Baums und k die Anzahl der gefundenen Schlüssel ist 4/3, Folie 24 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen