Datenstrukturen und Algorithmen VO 708.031 17.12.2009 [email protected] 1 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 – 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) • Online Update-Operationen können einen Binärbaum entarten lassen 17.12.2009 [email protected] 2 Balancierte Bäume • Techniken zum Erhalten einer logarithmischen Baumhöhe: Höhenbalanciert: h(B) = Höhe von B Für jeden Knoten gilt: 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 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 17.12.2009 [email protected] 3 (2-4)-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) 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 17.12.2009 [email protected] 4 (2-4)-Bäume • Beispiel: Innere Knoten speichern Hilfsinformationen (Max. der linken t-1 Unterbäume) 4,6 1,2 1 Höhe h=Θ(log n) 17.12.2009 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] 5 (2-4)-Bäume • Suchen: pro Knoten wird der relevante Teilbaum in O(t) = O(1) Zeit pro Knoten selektiert ⇒ O(h) = Θ(log n) Zeit 8 2 2 17.12.2009 4 4 10 5 5 11 8 10 12 11 [email protected] 12 24 24 31 6 (2-4)-Bäume • 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 (Wurzel wird Sohn einer neuen Wurzel mit 2 Söhnen) ⇒ O(h) = Θ(log n) Zeit 17.12.2009 [email protected] 7 (2-4)-Bäume • 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 evtl. für übergeordnete Knoten wiederholen (Wurzel wird durch einzigen Sohn ersetzt) ⇒ O(h) = Θ(log n) Zeit 17.12.2009 [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 Laufzeit von m Einfüge-/EntferneOperationen ist O(m), statt O(m*log n) 17.12.2009 [email protected] 9 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 14. Jan. 2010, 11:15, i13) 17.12.2009 [email protected] 10