Datenstrukturen und Algorithmen VO 708.031 17.01.2013 [email protected] 1 Wiederholung • (2‐4)‐Bäume: spezielle Struktur um logarithmische Höhe zu garanEeren (2 ≤ α(k) ≤ 4, ∀k; Werte sorEert in den BläOern) • ImplementaEon des Wörterbuchproblems (Suchen, EnRernen, Einfügen) in O(log n) Zeit pro OperaEon • NöEge Umstrukturierungen, um EigenschaVen eines (2‐4)‐ Baums aufrechtzuerhalten: – Einfügen: SPALTEN – EnRernen: STEHLEN, VERSCHMELZEN • Bereits vorgenommene Umstrukturierungen amor?sieren sich jedoch später: – m mal Einfügen/EnRernen: O(m) Umstrukt., staO O(m*log n) (ohne Beweis. Für Interessierte siehe HilfsbläOer) 17.01.2013 [email protected] 2 Anwendung von (2‐4)‐Bäumen • Mischbare Warteschlangen: – EINFÜGEN(S,x) Die Datenstruktur „Halde“ unterstützt – MAXIMUM(S) diese OperaEonen 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 Opera?onen in O(log n) Zeit möglich 17.01.2013 [email protected] 3 WH‐Prioritäts‐Warteschlangen (5.Vorlesung) • Defini?on: Eine Warteschlange ist eine Datenstruktur, die auf einer Menge A folgende OperaEonen erlaubt: EINFÜGEN(A,x) A=A∪{x} MAXIMUM(A) return max A ENTFERNE_MAX(A) A=A\{max A} • Anwendung: Job‐Scheduling; der Job maximaler Priorität wird dynamisch besEmmt und berechnet 15.11.2012 [email protected] 4 WH‐Binäre Max‐Halden • Darstellung als Binärbaum: EigenschaGen: • A[1] ist das Maximum (Wurzel) • Nur letztes Niveau evtl. inkompleO • Jeder Teilbaum ist wieder eine Halde i Vater(i ) = 2 Links(i ) = 2i Rechts(i ) = 2i + 1 15.11.2012 Höhe h = ld n [email protected] 5 WH‐Prioritäts‐Warteschlangen • OperaEonen auf einer Halde A: T(n) = O(1) T(n) = O(log n) T(n) = O(log n) 15.11.2012 [email protected] 6 Mischbare Warteschlangen • Unsor?erte (2‐4)‐Bäume: – Die BläOer speichern S in beliebiger Reihenfolge – Jeder innere Knoten speichert das Maximum in seinem Teilbaum und einen Zeiger auf das entsprechende BlaO 17.01.2013 [email protected] 7 Mischbare Warteschlangen • MAXIMUM(S): – in Wurzel gespeichert, O(1) Zeit • ENTFERNE_MAX(S): – Wurzel speichert Zeiger auf BlaO k mit dem größten Wert – EnRerne 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 HilfsinformaEon 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 17.01.2013 [email protected] 8 Mischbare Warteschlangen • 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' • Fall h=h': Neue Wurzel mit entsprechender HilfsinformaEon ⇒ O(1) Zeit • Fall h>h': (h<h' symm.) 17.01.2013 Sei k der rechteste Knoten von T mit Höhe h' Anhängen von w' an Vater v von k Weiter wie beim Einfügen in (2‐4)‐ Bäumen (evtl. Spalten) + HilfsinformaEon updaten ⇒ O(log n) Zeit [email protected] 9 SorEeren mit (2‐4)‐Bäumen • Wie macht man SorEeren durch Einfügen effizient? • InserEonSort: – Vorteil: adapEv; gut, wenn Folge schon (fast) sorEert 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) • SorEeren mit (2‐4)‐Bäumen („B‐Sort“): – AdapEv und hat O(n*log n) Laufzeit 17.01.2013 [email protected] 10 EigenschaVen von SorEerverfahren • Ein SorEerverfahren ist… – stabil: Elemente mit idenEschen SorEerschlüsseln erscheinen in Input und Output in gleicher Reihenfolge – adap?v: (teilweise) vorsorEerte Folgen werden effizienter sorEert (besseres Laufzeitverhalten für „fast“ sorEerte Folgen) – worst‐case op?mal: Jede Eingabefolge wird in O(n*log n) Zeit sorEert (der unteren Schranke für vergleichsbasierte SorEerverfahren) – in‐place: außer für einzelne Variablen (i, j, …) wird kein Zusatzspeicher (Hilfsfelder, …) benöEgt 22.11.2012 [email protected] 11 SorEeren mit (2‐4)‐Bäumen • Erste Idee: Füge die Zahlen a1,...,an nacheinander in einen sor?erten (2‐4)‐Baum ein. Am Ende liegen die Werte v.l.n.r. in aufsteigender Reihenfolge vor ⇒ Laufzeit O(n*log n) – Worst‐case opEmal, aber nicht adapEv! • Adap?ves SorEeren mit (2‐4)‐Bäumen: – Sor?erter (2‐4)‐Baum, innere Knoten speichern nur das Maximum im jeweiligen Teilbaum – Einfügen von an,...,a1 (verkehrte Reihenfolge) – Einfügen von ai boWom‐up staO top‐down 17.01.2013 [email protected] 12 SorEeren mit (2‐4)‐Bäumen • an,...,ai+1 bereits eingefügt (verkehrte Reihenfolge) • Einfügen von ai boWom‐up in bestehenden (2‐4)‐Baum T: – Starte mit BlaO ganz links (das aktuelle Minimum) – Laufe bis zur Wurzel w' von T' (w' ist der erste Knoten > ai) – Laufe von w' zum BlaO x und mache ai zum linken Bruder von x (wähle immer den ersten Teilbaum von links mit w(TB) > ai) evtl. SPALT‐OperaEonen nöEg, diese amorEsieren sich jedoch später Abhängigkeit von Vorsor?erung: fi = {a j | j > i, a j < ai } ... # Fehlstände für ai ai wird an der Stelle fi+1 eingefügt Laufzeit: Θ(log fi), staO Θ(log n) 17.01.2013 [email protected] 13 SorEeren mit (2‐4)‐Bäumen • Maß für die Sor?ertheit einer Zahlenfolge: Anzahl der Fehlstände (Inversionen) von a1,...,an n fi = {a j | j > i, a j < ai } F = ∑ fi i =1 • Laufzeit von B‐Sort: T (n) = O n log F + n n – Bsp.: (Fast‐)SorEerung: F = O(n) ⇒ T(n) = O(n) – Bsp.: Verkehrte SorEerung: F = Θ(n2) ⇒ T(n) = O(n*log n) (= worst‐case opEmal) 17.01.2013 [email protected] 14 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 24. Jan. 2013, 11:15, i13) 17.01.2013 [email protected] 15