Wiederholung • (2-4)-Bäume: spezielle Struktur um logarithmische Höhe zu garantieren (2 ≤ α(k) ≤ 4, ∀k; Werte sortiert in den Blättern) • Implementation des Wörterbuchproblems (Suchen, Entfernen, Einfügen) in O(log n) Zeit pro Operation • Nötige Umstrukturierungen, um Eigenschaften eines (2-4)Baums aufrechtzuerhalten: Datenstrukturen und Algorithmen VO 708.031 – Einfügen: SPALTEN – Entfernen: STEHLEN, VERSCHMELZEN • Bereits vorgenommene Umstrukturierungen amortisieren sich jedoch später: – m mal Einfügen/Entfernen: O(m) Umstrukt., statt O(m*log n) 19.01.2012 [email protected] 1 19.01.2012 Anwendung [email protected] 2 Mischbare Warteschlangen • Mischbare Warteschlangen: – EINFÜGEN(S,x) Die Datenstruktur „Halde“ unterstützt – MAXIMUM(S) diese Operationen in O(log n) Zeit, n=|S| – ENTFERNE_MAX(S) – MISCHE(S,S ') • Mischen von Halden ist teuer: O(n) Zeit • Mit einem (2-4)-Baum sind alle Operationen in O(log n) Zeit möglich 19.01.2012 [email protected] • Unsortierte (2-4)-Bäume: – Die Blätter speichern S in beliebiger Reihenfolge – Jeder innere Knoten speichert das Maximum in seinem Teilbaum und einen Zeiger auf das entsprechende Blatt 3 19.01.2012 [email protected] 4 Mischbare Warteschlangen Mischbare Warteschlangen • MAXIMUM(S): • EINFÜGEN(S,x): Spezialfall von MISCHE(S,S') mit S' = {x} • MISCHE(S,S'): S und S' sind (2-4)-Bäume mit Höhe h und h' – in Wurzel gespeichert, O(1) Zeit • Fall h=h': • ENTFERNE_MAX(S): Neue Wurzel mit entsprechender Hilfsinformation ⇒ O(1) Zeit – Wurzel speichert Zeiger auf Blatt k mit dem größten Wert – Entferne k wie in (2-4)-Bäumen üblich (evtl. Stehlen, Verschmelzen) – Berechne für die inneren Knoten auf dem Ast von k bis zur Wurzel die Hilfsinformation neu – Pro Knoten wird das Maximum aus ≤ 4 Söhnen berechnet ⇒ O(1) Zeit pro Knoten – Die Höhe des Baumes ist O(log n) ⇒ O(log n) Zeit 19.01.2012 [email protected] • Fall h>h': (h<h' symm.) Anhängen von w' an Vater v von k Weiter wie beim Einfügen in (2-4)Bäumen (evtl. Spalten) + Hilfsinformation updaten ⇒ O(log n) Zeit 5 19.01.2012 Sortieren mit (2-4)-Bäumen [email protected] [email protected] 6 Sortieren mit (2-4)-Bäumen • Wie macht man Sortieren durch Einfügen effizient? • InsertionSort: – Vorteil: adaptiv; gut, wenn Folge schon (fast) sortiert ist – Nachteil: Θ(n2) im worst case • Vgl. z.B. MergeSort: – Hat für jeden Input Θ(n*log n) Laufzeit (auch für den best case) • Sortieren mit (2-4)-Bäumen („B-Sort“): – Adaptiv und hat O(n*log n) Laufzeit 19.01.2012 Sei k der rechteste Knoten von T mit Höhe h' • Erste Idee: Füge die Zahlen a1,...,an nacheinander in einen sortierten (2-4)-Baum ein. Am Ende liegen die Werte v.l.n.r. in aufsteigender Reihenfolge vor ⇒ Laufzeit O(n*log n) – Worst-case optimal, aber nicht adaptiv! • Adaptives Sortieren mit (2-4)-Bäumen: – Sortierter (2-4)-Baum, innere Knoten speichern nur das Maximum im jeweiligen Teilbaum – Einfügen von an,...,a1 (verkehrte Reihenfolge) – Einfügen von ai bottom-up statt top-down 7 19.01.2012 [email protected] 8 Sortieren mit (2-4)-Bäumen Sortieren mit (2-4)-Bäumen • Maß für die Sortiertheit einer Zahlenfolge: Anzahl der Fehlstände (Inversionen) von a1,...,an • an,...,ai+1 bereits eingefügt (verkehrte Reihenfolge) • Einfügen von ai bottom-up in bestehenden (2-4)-Baum T: – Starte mit Blatt ganz links (das aktuelle Minimum) – Laufe bis zur Wurzel w' von T' (w' ist der erste Knoten > ai) – Laufe von w' zum Blatt x und mache ai zum linken Bruder von x (wähle immer den ersten Teilbaum von links mit w(TB) > ai) n F = ∑ fi f i = {a j | j > i, a j < ai } i =1 • Laufzeit von B-Sort: T (n) = O n log F + n evtl. SPALT-Operationen nötig, diese amortisieren sich jedoch später n – Bsp.: (Fast-)Sortierung: F = O(n) ⇒ T(n) = O(n) – Bsp.: Verkehrte Sortierung: F = Θ(n2) ⇒ T(n) = O(n*log n) (= worst-case optimal) Abhängigkeit von Vorsortierung: f i = {a j | j > i, a j < ai } ... # Fehlstände für ai ai wird an der Stelle fi+1 eingefügt Laufzeit: Θ(log fi), statt Θ(log n) 19.01.2012 [email protected] 9 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 26. Jan. 2011, 11:15, i13) 19.01.2012 [email protected] 11 19.01.2012 [email protected] 10