08 Rot-schwarz Bäume

Werbung
Datenstrukturen & Algorithmen
Matthias Zwicker
Universität Bern
Frühling 2010
Übersicht
Rot-schwarz Bäume
• Eigenschaften
• Rotationen
• Einfügen
• (Löschen)
2
Einführung
• Binäre Suchbäume
–
–
–
–
Höhe h
Höh
O(h) für Operationen auf dynamische Mengen
Baum kann zu Liste degenerieren
h ist im Worst Case O(n)
• Balancierte Suchbäume
– Garantieren
Garantieren, dass Baum nicht zu Liste
degenerieren kann
– Garantieren h=O(lg n)
– Erzwungen mittels zusätzlichen Bedingungen
an Datenstruktur
3
Rot-schwarz Bäume
• Eine Variante von balancierten
Suchbäumen
• Ggarantieren,
g
, dass Höhe im Worst Case
O(lg n) statt wie vorher O(n)
– Alle
All Operationen
O
i
sind
i d O(lg
O(l n))
4
Rot-schwarz Bäume
• Zeiger gleich wie binäre Suchbäume
(left right,
(left,
right p)
• Konvention
– Falls ein Kind nicht existiert, wird Zeiger auf
Wä ht l
Wächterelement
t nil[T]
il[T] gespeichert
g
i h t
– Alle Knoten ausser nil[T] werden als innere
Knoten betrachtet
g auch auf nil[T]
– Vater von Wurzel zeight
5
Rot-schwarz Bäume
Hauptidee
• Jeder Knoten hat ein Bit Zusatzinformation
– Farbe des Knotens
– Rot oder schwarz
• Bedingungen
g g an Farbreihenfolge
g entlang
g
Pfaden von Wurzel zu Blatt
– Garantieren
Garantieren, dass kein Pfad mehr als doppelt so
lang als alle anderen
– Baum ist balanciert
• Einfügen und Löschen müssen Bedingungen
erhalten
6
Eigenschaften
7
Beispiel
8
Schwarz-Höhe
• Höhe eines Knotens
– Länge des längsten Pfades vom Knoten zu
einem Blatt
• Schwarz-Höhe eine Knotens bh(x)
– A
Anzahl
hl Schwarzer
S h
K
Knoten
t auff iirgendeinem
d i
Pfad von x zum Blatt nil[T]
– x selbst nicht gezählt
[ ] mitgezählt
g
– Blatt nil[T]
– Wegen Eigenschaft 5 wohldefiniert
9
Beispiel
10
Höhe von rot-schwarz Bäumen
• Lemma: Eigenschaften von rot-schwarz
Bäumen garantieren
garantieren, dass Höhe des
Baumes h <= 2lg(n+1) = O(lg n)
• Garantiert effiziente Operationen!
• Beweis mittels 2 Behauptungen
11
Höhe von rot-schwarz Bäumen
1. Behauptung: Knoten mit Höhe h hat
Schwarz-Höhe bh mindestens h/2
• Beweis: Eigenschaft
g
4
– Höchstens h/2 rote Knoten auf einem Pfad von
K t zu jjedem
Knoten
d
Bl
Blatt
tt
– Mindestens h/2 Schwarze Knoten
12
Höhe von rot-schwarz Bäumen
2. Behauptung: Unterbaum von jedem
Knoten x hat ≥ 2bh((x)) − 1 interne Knoten
13
Höhe von rot-schwarz Bäumen
• Zusammenfassend
1. Knoten mit Höhe h hat Schwarz-Höhe ≥ h/2
/
2. Für jjeder Knoten x,, Unterbaum hat
interne Knoten ≥ 2bh(x) − 1
• Sei b Schwarz
Schwarz-Höhe
Höhe der Wurzel,
Wurzel n Anzahl
Knoten im ganzen Baum
14
Operationen
• Nicht-modifizierende Operationen (Suchen,
Vorgänger, Nachfolger, Minimum, Maximum)
gleich
l i h wie
i bi
binäre
ä SSuchbäume
hbä
– Aufwand O(lg n)
• Einfügen und Löschen sind komplizierter
• Einfügen
– Roter Knoten: kann Eigenschaft 4 verletzen
– Schwarzer Knoten: kann Eigenschaft 5 verletzen
• Löschen
– Rote Knoten: kein Problem
– Schwarze Knoten: kann Eigenschaften 2, 4, oder 5
verletzen
15
Übersicht
Rot-schwarz Bäume
• Eigenschaften
• Rotationen
• Einfügen
• (Löschen)
16
Rotationen
• Einfügen und Löschen zerstören rotschwarz Eigenschaften
• Benötigen
g Rotationen,, um rot-schwarz
Eigenschaften wiederherzustellen
– Ändern
Ä d
Baumstruktur
B
k
– Bewahren binäre Suchbaum-Eigenschaft
• Es gibt Links- und Rechtsrotationen
– Inverse voneinander
– Implementiert durch umhängen von Zeigern
17
Rotationen
18
Beispiel
19
Rotationen
• Aufwand konstant, da eine konstante
Anzahl Zeiger verändert werden
• Rotationen werden auch in anderen
balancierten Suchbäumen verwendet
– AVL Bä
Bäume, SSplay
l Bä
Bäume
http://en.wikipedia.org/wiki/AVL_tree
http://en.wikipedia.org/wiki/Splay_tree
Übersicht
Rot-schwarz Bäume
• Eigenschaften
• Rotationen
• Einfügen
• (Löschen)
21
Einfügen
• Zwei Schritte
1. Einfügen (fast) wie in binären Suchbaum
2 Wiederherstellen der rot-schwarz
2.
rot schwarz
Eigenschaften
22
Einfügen
23
Eigenschaften
1. Ok
2. Verletzt falls z die Wurzel ist, sonst Ok
3 Ok
3.
4. Verletzt falls p[z] rot ist: sowohl z wie
auch p[z] sind rot
5. Ok
24
Wiederherstellen der Eigenschaften
25
Schleifeninvariante
• Zu Beginn jeder Iteration der whileSchleife gilt
a. z ist rot
b. Falls p[z] Wurzel, dann ist p[z] schwarz
c Es gibt höchstens eine rot
c.
rot-schwarz
schwarz
Verletzung
• Eigenschaft 2: z is die Wurzel und rot
• Eigenschaft 4: sowohl z wie auch p[z] sind rot
26
Schleifeninvariante
Initialisierung
a. B
Beii IInitialisierung
iti li i
iistt z roter
t K
Knoten,
t
d
der
eingefügt wurde
b. Falls p[z] Wurzel, dann schwarz vor
Einfügen und Farbe wurde nicht geändert
Einfügen,
c. Zwei Fälle
– Falls Eigenschaft 2 verletzt: rote Wurzel ist
Knoten der eingefügt wurde, keine andere
Verletzung
alls Eigenschaft
ge sc a t 4 ve
verletzt:
let t: z u
und
d p[
p[z]] ssind
d rot,
ot,
– Falls
keine andere Verletzung
27
Schleifeninvariante
Terminierung
• Schleife endet weil p[z] schwarz ist, also
ist Eigenschaft
g
4 ok
• Letzte Zeile garantiert Eigenschaft 2
• Deshalb: rot-schwarz Eigenschaften bei
Terminierung erfüllt
28
Schleifeninvariante
Fortsetzung
• Fallunterscheidung
– 6 Fälle,
Fälle 3 symmetrisch zu den anderen 3
– Je 3 Fälle für p[z] entweder linkes oder
rechtes
ht Ki
Kind
d
– Beschreibung hier nimmt an p[z] ist linkes Kind
– y bezeichnet den Onkel von z, also den Bruder
von p[z]
p[ ]
• Fälle schliessen sich gegenseitig nicht aus
29
Fall 1: Onkel y ist rot
• p[p[z]]
[ [ ]] muss schwarz
h
sein,
i weil
il sowohl
hl z wie
i
p[z] rot sind, aber es nur eine Verletzung von
Eigenschaft 4 gibt
• Mache p[z] und y schwarz => Eigenschaft 4 ok,
aber Eigenschaft 5 kann verletzt
erlet t sein
• Mache p[p[z]] rot => Eigenschaft 5 ok
• Nächste Iteration hat p[p[z]] als neues z
30
Fall 2: y ist schwarz, z ist rechtes Kind
• Linksrotation um p[z] => z ist nun linkes
Kind, und z und p[z] sind rot
• Sind nun in Fall 3
31
Fall 3: y ist schwarz, z ist linkes Kind
• Mache p[z] schwarz und p[p[z]] rot
• Rechtsrotation
h
um p[p[z]]
• Eigenschaft 4 ok: nicht mehr zwei
aufeinanderfolgende rote Knoten
• p[z]
[ ] ist
i t jetzt
j t t Schwarz
S h
=> k
keine
i weiteren
it
Iterationen
32
Analyse
• O(lg n) für RB-Insert
• Für RB-Insert-Fixup
– Jede Iteration ist O(1)
– Jede Iteration ist entweder die letzte (Fälle 2
und
d 3) oder
d b
bewegtt z zweii St
Stufen
f nach
h oben
b
(Fall 1)
– O(lg n) Stufen => O(lg n) Zeit
g
– Höchstens 2 Rotationen insgesamt!
• Total: Einfügen in rot-schwarz Baum ist
O(lg n)
33
Übersicht
Rot-schwarz Bäume
• Eigenschaften
• Rotationen
• Einfügen
• (Löschen)
34
Löschen
• Zwei Schritte
1. Löschen (fast) wie aus binärem Suchbaum
2 Wiederherstellen der rot-schwarz
2.
rot schwarz
Eigenschaften
35
Löschen
36
Löschen
• y wurde ausgeschnitten
• x ist entweder
– yy‘ss einziges Kind bevor y ausgeschnitten wurde
– oder der Wächter, falls y keine Kinder hatte
• p[x] zweigt auf Knoten, der vorher y‘s
Vater war
37
Rot-schwarz Verletzungen
• Falls y rot, keine Verletzungen
–
–
Keine
K
i Veränderung
V ä d
g der
d SSchwarz-Höhen
h
Höh
Keine neuen roten Knoten
• Falls y schwarz, mögliche Verletzungen
1. Ok
1
2. Falls y die Wurzel und x rot ist, dann wurde
Wurzel rot
3. Ok
4 Verletzt falls p[y] und x rot sind
4.
5. Jeder Pfad, der y enthält, hat jetzt einen
schwarzen Knoten weniger
38
Rot-schwarz Verletzungen
• Idee zur Reparatur: x bekommt ein
„zusätzliches
zusätzliches“ Schwarz
• Alle Pfade,, die x enthalten,, erhalten +1
schwarz
• Eigenschaft 5 repariert, aber Eigenschaft 1
verletzt
– x ist doppelt schwarz oder rot & schwarz
39
Reparatur
• Interpretation
– Der Knoten, auf den x zeigt, hat ein
zusätzliches („gedachtes“) Schwarz, aber sein
Farbattribut wird nicht geändert
• Idee:
dee: bewege x im Baum
au nach
ac oben,
obe , bis
bs
– x zeigt auf einen rot & schwarzen Knoten =>
mache
h x schwarz
h
– x zeigt auf die Wurzel => zusätzliches Schwarz
wird einfach entfernt
g
Rotationen und Umfärbungen
g
– Geeignete
durchgeführt werden können
40
Reparatur
41
Reparatur
• In der while Schleife
– Zeigt x immer auf einen nicht
nicht-Wurzel
Wurzel, doppelt
schwarzen Knoten
– w ist der Bruder von x
– w kann nicht nil[T] sein, weil das Eigenschaft 5 am
Knoten p[x] verletzen würde
• 8 Fälle,
Fäll je
j 4 symmetrisch
i h
– Hier: betrachten Fälle wo x ein linkes Kind ist
– Fälle schliessen sich gegenseitig nicht aus
• Idee
– Jede Transformation erhält Eigenschaft 5
– Jede Transformation verschiebt x zu p[
p[x],
], oder führt
zu Termination der Schleife in der nächsten Iteration
42
Fall 1
Bruder w von x ist rot
•
•
•
•
w muss schwarze Kinder haben
Mache w schwarz und p[x] rot
Linksrotation auf p[x]
Neuer Bruder von x war Kind von w bevor
Rotation => muss schwarz sein
• Gehe zu Fall 2
2, 3 oder 4
43
Fall 2
w ist schwarz und w‘s Kinder sind schwarz
• Entferne 1 Schwarz von x (=> einfach schwarz) und
1 von w (=> rot)
• Bewege Schwarz zu p[x]
• Nächste Iteration mit p[
p[x]] als neuem x
• Falls vorher Fall 1, dann war p[x] rot => neues x ist
rot & schwarz => Farbattribut von neuem x ist rot
=> Schleife terminiert, neues x wird schwarz in
letzter Zeile
44
Fall 3
w ist schwarz, linkes Kind rot, rechtes schwarz
• Mache w rot und w‘s linkes Kind schwarz
• Rechtsrotation auf w
• Neuer Bruder w von x ist schwarz mit rotem Kind
=> Fall 4
45
Fall 4
w ist schwarz, w‘s rechtes Kind ist rot
• Mache w die Farbe von p[x]
p[ ]
• Mache p[x] schwarz und w‘s rechtes Kind schwarz
• Linksrotation auf p[x]
[ ]
• Entferne extra schwarz auf x (=> x jetzt einfach
schwarz)
h
) ohne
h rot-schwarz
t h
Ei
Eigenschaften
h ft zu
verletzen
• Fertig.
F i Lass
L
x auff Wurzel
W
l zeigen,
i
SSchleife
hl if terminiert
i i
46
Analyse
• RB-Delete ist O(lg n)
• RB-Delete-Fixup
– Nur Fall 2 erfordert mehr Iterationen
• x bewegt sich eine Stufe nach oben
• O(lg
O(l n)) Iterationen
It ti
– Fälle 1, 3 und 4 haben eine Rotation =>
hö h
höchstens
3R
Rotationen
i
totall
– Total O(lg n)
47
Zusammenfassung
• Binäre Suchbäume
–
–
–
–
Binäre Suchbaum
Suchbaum-Eigenschaft
Eigenschaft
Wörterbuchoperationen (Suchen, Einfügen, Löschen)
Prioritätswarteschlangen
o tätswa tesc la ge (M
(Minimum,
u , Ma
Maximum)
u )
Sortierte Ausgabe (Vorgänger, Nachfolger)
• Ohne Zusatzbedingungen:
g g
Höhe h=O(n)
( )
– Kann zu Liste degenerieren
• Balancierte Bäume
–
–
–
–
Z.B. rot-schwarz Bäume
Zusatzbedingungen an Struktur
Garantiert logarithmische Höhe h=O(lg n)
Zusatzbedingungen müssen nach Einfügen,
Einfügen Löschen
wiederhergestellt werden, Aufwand O(lg n)
48
Nächstes Mal
• Kapitel 15: dynamisches Programmieren
49
Herunterladen