Wiederholung • Binärbäume sind Bäume der Ordnung 2 (jeder Knoten hat maximal 2 Söhne) • Sortierte Binärbäume (binäre Suchbäume) sind in symmetrischer Reihenfolge sortiert • Dynamische Lösung des Wörterbuchproblems Datenstrukturen und Algorithmen – Einfügen (Aufbau), Entfernen, Suchen, Minimum, Maximum, Vorgänger, Nachfolger – O(h) Zeit, h … Baumhöhe – Vollständiger Binärbaum: h=O(log n); entarteter Baum: h=Θ(n) VO 708.031 • Online Update-Operationen können einen Binärbaum entarten lassen 16.12.2010 [email protected] 1 16.12.2010 Balancierte Bäume Gewichtsbalanciert: g(B) = #Blätter von B Für jeden Knoten gilt: h( Blinks ) − h( Brechts ) ≤ k 1 g ( Blinks ) ≤ ≤α α g ( Brechts ) z.B.: AVL-Bäume • Balancierung ist leichter aufrechtzuerhalten, wenn die Werte blattorientiert statt knotenorientiert gespeichert werden. Innere Knoten enthalten nur Hilfsinformationen. • Definition: Ein (2-4)-Baum ist ein Baum mit folgenden Eigenschaften: (1) (2) (3) (4) (5) BB-Bäume (bounded balance) Mehrwegbäume: Alle Blätter haben dieselbe Tiefe, aber Grad der Knoten ist variabel (a-b)-Bäume, B-Bäume, Bruder-Bäume 16.12.2010 [email protected] 2 (2-4)-Bäume • Techniken zum Erhalten einer logarithmischen Baumhöhe: Höhenbalanciert: h(B) = Höhe von B Für jeden Knoten gilt: [email protected] Alle Äste sind gleich lang. Die max. Anzahl der Söhne eines Knotens ist gleich 4. Innere Knoten haben ≥ 2 Söhne. Die Blätter enthalten v.l.n.r. die Werte aufsteigend sortiert. 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 iten Sohnes von links. 2 ≤ α(k) ≤ 4 … Anzahl der Söhne des Knotens k 3 16.12.2010 [email protected] 4 (2-4)-Bäume • Beispiel: (2-4)-Bäume Innere Knoten speichern Hilfsinformationen (Max. der linken t-1 Unterbäume) 4,6 • Suchen: pro Knoten wird der relevante Teilbaum in O(t) = O(1) Zeit pro Knoten selektiert ⇒ Θ(h) = Θ(log n) Zeit 8 1,2 1 Höhe h=Θ(log n) 16.12.2010 2 5 4 5 6 10 11 24 2 2 Daten werden in den Blättern gespeichert (v.l.n.r. aufsteigend sortiert) [email protected] 5 16.12.2010 (2-4)-Bäume 4 5 12 10 5 8 10 11 12 24 24 31 [email protected] 6 • Entfernen: Suchen, Blatt von Knoten k entfernen – α(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 (Wurzel wird Sohn einer neuen Wurzel mit 2 Söhnen) ⇒ O(h) = O(log n) Zeit [email protected] 4 (2-4)-Bäume • Einfügen: Suchen, Blatt an Knoten k anhängen 16.12.2010 11 10,11 – α(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 evtl. für übergeordnete Knoten wiederholen (Wurzel wird durch einzigen Sohn ersetzt) ⇒ O(h) = O(log n) Zeit 7 16.12.2010 [email protected] 8 (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. • Einfügen und Entfernen erfordert Umstrukturierungen (Spalten, Stehlen, Verschmelzen) • Bereits vorgenommene Umstrukturierungen amortisieren sich jedoch später • Amortisierte Analyse: Die Anzahl an Umstrukturierungen bei m Einfüge-/Entferne-Operationen ist O(m), statt O(m*log n) 16.12.2010 [email protected] Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 13. Jan. 2011, 11:15, i13) 9 16.12.2010 [email protected] 10