Datenstrukturen und Algorithmen VO 708.031 17.01.2013 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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
elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 14 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 24. Jan. 2013, 11:15, i13) 17.01.2013 elmar.rueckert@igi.tugraz.at 15