Datenstrukturen und Algorithmen VO 708.031 (2-4)-Bäume [email protected] 1 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 [email protected] 2 WH - Binärbäume • Jeder Knoten hat maximal zwei Nachfolger Existiert ein Sohn- oder ein Vaterknoten nicht, wird nil zurückgeliefert (2-4)-Bäume [email protected] 3 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) = Θ(n2), wenn h = Θ(n) Einige wenige Reihenfolgen liefern entartete Bäume (= Listen) Fügt man randomisiert ein, ist E[h] klein (2-4)-Bäume [email protected] 4 Binärbäume - online Durch Update-Operation (Löschen, Einfügen) 1 9 Höhe ≠ log(n) 8 Entartet! 3 Höhe = O(n) Umstrukturieren O(n) (fast) ausgeglichen = gut, da minimale Höhe = O( log n) 11.12.2008 teuer! 7 4 5 [email protected] 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 [email protected] 6 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 [email protected] 7 Balancierte Bäume • Bedingungen zum Erhalten einer logarithmischen Baumhöhe: 1. Höhenbedingung: h(B) = Höhe von B Für jeden Knoten gilt: 2. Gewichtsbedingung: g(B) = #Blätter von B Für jeden Knoten gilt: h( Blinks ) h( Brechts ) k 1 z.B.: AVL-Bäume (1962) g ( Blinks ) g ( Brechts ) BB-Bäume (bounded balance) 3. Strukturbedingung: Alle Blätter haben die gleiche Tiefe, aber Ordnung der Knoten (# Söhne) ist variabel (a-b)-Bäume, B-Bäume, Bruder-Bäume (2-4)-Bäume [email protected] 8 (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 Söhne eines Knotens ist 4. (3) Innere Knoten haben 2 Söhne. (4) Die Blätter enthalten v.l.n.r. die Werte aufsteigend sortiert. (5) Jeder innere Knoten mit t Söhnen (2 t 4) speichert t-1 Hilfsinformationen x1, …, xt-1, wobei xi = größter Wert im Teilbaum des i-ten Sohnes von links. 2 ≤ α(k) ≤ 4 … Anzahl der Söhne des Knotens k (2-4)-Bäume [email protected] 9 (2-4)-Bäume • Beispiel: Innere Knoten speichern Hilfsinformationen (z.B.: Max. der linken t-1 Unterbäume) 4,6 1,2 1 Höhe h=Θ(log n) (2-4)-Bäume 2 10,11 5 4 5 6 10 11 24 Daten werden in den Blättern gespeichert (v.l.n.r. aufsteigend sortiert) [email protected] 10 (2-4)-Bäume: Suchen • Suchen: pro Knoten wird der relevante Teilbaum in O(t) = O(1) Zeit pro Knoten selektiert ⇒ Θ(h) = Θ(log n) Zeit 8 2 2 (2-4)-Bäume 4 4 10 5 5 11 8 10 12 11 [email protected] 12 24 24 31 11 (2-4)-Bäume: Einfügen 2 ≤ α(k) ≤ 4 … Anzahl der Söhne 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 Söhne 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 Sohn einer neuen Wurzel mit α(w)=2) ⇒ O(h) = O(log n) Zeit (2-4)-Bäume [email protected] 12 (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 Sohnes 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 einzigen Sohn ersetzt) ⇒ O(h) = O(log n) Zeit (2-4)-Bäume [email protected] 13 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 [email protected] 14 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 [email protected] 15 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 [email protected] 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 [email protected] 17 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 [email protected] 18 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 [email protected] 19 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‘ and Vater von 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 [email protected] 20