Datenstrukturen und Algorithmen VO INF.02031UF (2-4)-Bäume robert.legenstein@igi.tugraz.at 1
7. Bäume Bäume als Datenstruktur Binärbäume Balancierte Bäume (2-4)-Bäume Anwendung: Mischbare Warteschlangen (2-4)-Bäume robert.legenstein@igi.tugraz.at 2
Sortierte Binärbäume können entarten! Aufbau eines sortierten Binärbaumes: durch wiederholtes Einfügen ( natürliche Bäume) Binärbaum hängt von der Reihenfolge der Elemente ab T(n) = O(n*h) = Θ(n 2 ), wenn h = Θ(n) Einige Reihenfolgen liefern entartete Bäume (= Listen) Fügt man randomisiert ein, ist E h = Θ log n (2-4)-Bäume robert.legenstein@igi.tugraz.at 3
Binärbäume - online Durch Update-Operation (Löschen, Einfügen) 1 Höhe log(n) 3 8 9 Entartet! Höhe = O(n) Umstrukturieren O(n) 7 (fast) ausgeglichen = gut, da minimale Höhe = O( log n) teuer! 4 5 11.12.2008 robert.legenstein@igi.tugraz.at
Zusammenfassung - Sortierte Binärbäume Zusammenfassung: Minimum Maximum Vorgänger Nachfolger Einfügen Löschen Suchen Alle Operationen in O(h) Zeit h Baumhöhe Vorteil: dynamische Lösung des Wörterbuchproblems Nachteil: Zeiten bis zu Θ(n) wenn Baum entartet ist, Bsp.: online Elemente hinzufügen (2-4)-Bäume robert.legenstein@igi.tugraz.at 5
7. Bäume Bäume als Datenstruktur WH Binärbäume Balancierte Bäume (2-4)-Bäume Anwendung: Mischbare Warteschlangen (2-4)-Bäume robert.legenstein@igi.tugraz.at 6
Balancierte Bäume Bedingungen zum Erhalten einer logarithmischen Baumhöhe: 1. Höhenbedingung: h(b) = Höhe von B Für jeden Knoten gilt: h( B links ) h( B ) rechts z.b.: AVL-Bäume (1962) k 2. Gewichtsbedingung: g(b) = #Blätter von B Für jeden Knoten gilt: 1 g( Blinks) g( B ) rechts BB-Bäume (bounded balance) 3. Strukturbedingung: Alle Blätter haben die gleiche Tiefe, aber Ordnung der Knoten (# Kinder) ist variabel (a-b)-bäume, B-Bäume, Bruder-Bäume (2-4)-Bäume robert.legenstein@igi.tugraz.at 7
(2-4)-Bäume Balancierung ist leichter aufrechtzuerhalten, wenn die Werte blattorientiert statt knotenorientiert gespeichert werden. Innere Knoten enthalten nur Hilfsinformationen. Ein (2-4)-Baum ist ein Baum mit folgenden Eigenschaften: (1) Alle Äste sind gleich lang. (2) Die max. Anzahl der Kinder eines Knotens ist 4. (3) Innere Knoten haben 2 Kinder. (4) Die Blätter enthalten v.l.n.r. die Werte aufsteigend sortiert. (5) Jeder innere Knoten k mit α(k) Kinder (2 α(k) 4) speichert α(k)-1 Hilfsinformationen x 1,, x α(k)-1, wobei x i = größter Wert im Teilbaum des i-ten Kindes von links. 2 α(k) 4 Anzahl der Kinder des Knotens k (2-4)-Bäume robert.legenstein@igi.tugraz.at 8
(2-4)-Bäume Beispiel: 4,6 Innere Knoten k speichern Hilfsinformationen (z.b.: Max. der linken α(k) Unterbäume) 1,2 5 10,11 1 2 4 5 6 10 11 24 Höhe h=θ(log n) Daten werden in den Blättern gespeichert (v.l.n.r. aufsteigend sortiert) n Anzahl der Blätter (= Anzahl gespeicherte Keys) (2-4)-Bäume robert.legenstein@igi.tugraz.at 9
(2-4)-Bäume: Suchen Suchen: pro Knoten wird der relevante Teilbaum in O(1) Zeit pro Knoten selektiert Θ(h) = Θ(log n) Zeit 8 11 2 4 5 10 12 24 2 4 5 8 10 11 12 24 31 (2-4)-Bäume robert.legenstein@igi.tugraz.at 10
(2-4)-Bäume: Einfügen 2 α(k) 4 Anzahl der Kinder des Knotens k Einfügen: Suchen, Blatt an Knoten k anhängen α(k) 4: Resultierender Baum ist wieder ein (2-4)-Baum α(k) = 5: Resultierender Baum ist kein (2-4)-Baum SPALTEN von k: Gib k einen Bruder k' rechts von k. Hänge die 2 rechtesten Kinder von k auf k' um α(k) = 3, α(k') = 2 SPALTEN muss evtl. für übergeordnete Knoten wiederholt werden (evt. bis zur Wurzel. Diese wird dann Kind einer neuen Wurzel mit α(w)=2) O(h) = O(log n) Zeit (2-4)-Bäume robert.legenstein@igi.tugraz.at 11
(2-4)-Bäume: Entfernen Entfernen: Suchen, Blatt von Knoten k entfernen α(k) 2: Resultierender Baum ist wieder ein (2-4)-Baum α(k) = 1: Resultierender Baum ist kein (2-4)-Baum Sei k' ein direkter Bruder von k: α(k') 3: STEHLEN eines Kindes von k' α(k) = 2, α(k') 2 α(k') =2: VERSCHMELZEN von k mit k' α(k) = 3 Verschmelzen evt. für übergeordnete Knoten wiederholen (Wurzel wird durch einziges Kind ersetzt) O(h) = O(log n) Zeit (2-4)-Bäume robert.legenstein@igi.tugraz.at 12
Zusammenfassung (2-4)-Bäume Der (2-4)-Baum ist eine Datenstruktur, die das Wörterbuchproblem (Suchen, Einfügen, Entfernen) auf einer Menge von n Elementen in O(log n) Zeit pro Operation löst, und O(n) Speicher belegt. Dies ist worst-case optimal (auch bzgl. statischer Suche!). Einfügen und Entfernen erfordert Umstrukturierungen (Spalten, Stehlen, Verschmelzen) Bereits vorgenommene Umstrukturierungen amortisieren sich jedoch später (2-4)-Bäume robert.legenstein@igi.tugraz.at 13
Anwendung: Mischbare Warteschlangen 4 Operationen: EINFÜGE(S, x) MAXIMUM(S) ENTFERNE_MAX(S) MISCHE(S, S ) Die Datenstruktur Halde unterstützt die ersten 3 Operationen in O(log n) Zeit. Mischen von Halden ist aber teuer, O(n) Zeit. Bäume sind flexibel genug um Mischen in O(log n) Zeit zu ermöglichen. (2-4)-Bäume robert.legenstein@igi.tugraz.at 14
Mischbare Warteschlangen Mischbare Warteschlange mittels unsortiertem (2-4)-Baum: Die Blätter speichern S in beliebiger Reihenfolge. Jeder Knoten speichert das Maximum in seinem Teilbaum, sowie einen Zeiger auf das entsprechende Blatt. (2-4)-Bäume robert.legenstein@igi.tugraz.at 15
Mischbare Warteschlangen MAXIMUM(S): trivial, berichte Hilfsinfo in Wurzel. ENTFERNE_MAX(S): Wurzel zeigt auf Blatt k mit größtem Wert. Entferne k wie in (2-4)-Bäumen üblich Berechne für die inneren Knoten auf dem Ast von k bis zur Wurzel die Info neu. Aufwand: O(log n). (2-4)-Bäume robert.legenstein@igi.tugraz.at 16
Mischbare Warteschlangen MAXIMUM(S): trivial, berichte Hilfsinfo in Wurzel. ENTFERNE_MAX(S): Wurzel zeigt auf Blatt k mit größtem Wert. Entfene k wie in (2-4)-Bäumen üblich Berechne für die inneren Knoten auf dem Ast von k bis zur Wurzel die Info neu. Aufwand: O(log n). (2-4)-Bäume robert.legenstein@igi.tugraz.at 17
Mischbare Warteschlangen EINFÜGE(S, x): Wie einfügen in (2-4)-Baum (aber unsortiert). MISCHE(S, S ): Fall h = h : Neue Wurzel mit entsprechender Info. O(1) Zeit. (2-4)-Bäume robert.legenstein@igi.tugraz.at 18
Mischbare Warteschlangen MISCHE(S, S ): Fall h > h (h < h analog): Sei k der rechteste Knoten von T mit Höhe h. Anhängen von w an parent v von k. Wenn α(v) = 5: SPALTEN von v, evt. weiter nach oben spalten wie beim Einfügen in (2-4)-Baum (+ Info updaten). Aufwand: O(log n) (2-4)-Bäume robert.legenstein@igi.tugraz.at 19