teilbaum o n

Werbung
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 
Herunterladen