1 Übersicht Rot-schwarz Bäume Rot-schwarz

Werbung
Übersicht
Rot-schwarz Bäume
• Eigenschaften
• Einfügen
Datenstrukturen & Algorithmen
Matthias Zwicker
Universität Bern
Frühling 2009
2
Rot-schwarz Bäume
Rot-schwarz Bäume
• Binäre Suchbäume sind nur effizient wenn
Höhe des Baumes klein
• Binäre Suchbäume mit einem Bit
Zusatzinformation pro Knoten
• Rot-schwarz Bäume garantieren, dass Höhe
im Worst Case O(lg n) statt O(n) wie vorher
• Alle Blätter sind nil und schwarz
– Farbe des Knotens rot oder schwarz
– All
Alle Operationen
O
i
sind
i d O(lg
O(l n))
– Eine von vielen Varianten von balancierten
Suchbäumen
– Ein Wächter Element nil für ganzen Baum
– color[nil[T]] ist schwarz
– Vater von Wurzel zeight auch auf nil[T]
• Andere Eigenschaften wie binäre
Suchbäume (key, left, right, p)
3
Eigenschaften
4
Beispiel
5
6
1
Höhe von rot-schwarz Bäumen
Beispiel
• 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 d
dem Pf
Pfad
d von x
zu irgendeinem Blatt
– x selbst nicht gezählt
– Blatt nil[T] mitgezählt
– Wegen Eigenschaft 5 wohldefiniert
7
8
Höhe von rot-schwarz Bäumen
Höhe von rot-schwarz Bäumen
• Ziel: zeige, dass Eigenschaften von rotschwarz Bäumen garantieren, dass Höhe
des Baumes h = O(lg n)
• Ziel: zeige, dass Eigenschaften von rotschwarz Bäumen garantieren, dass Höhe
des Baumes h = O(lg n)
1. Behauptung: Knoten mit Höhe h hat
Schwarz-Höhe
Schwarz
Höhe bh mindestens h/2
• Beweis: Eigenschaft 4
– Höchstens h/2 rote Knoten auf einem Pfad von
Knoten zu jedem Blatt
– Mindestens h/2 Schwarze Knoten
9
10
Höhe von rot-schwarz Bäumen
Höhe von rot-schwarz Bäumen
2. Behauptung: Unterbaum von jedem
Knoten x hat ≥ 2bh(x) − 1 interne Knoten
• Zusammenfassend
1. Knoten mit Höhe h hat Schwarz-Höhe ≥ h/2
2. Für jeder 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
11
12
2
Operationen
Vorbereitung: Rotationen
• Nicht-modifizierende Operationen
(Suchen, Vorgänger, Nachfolger, Minimum,
Maximum) gleich wie binäre Suchbäume
• Grundsätzliche Operation um Baumstruktur
zu verändern
• Benötigt um rot-schwarz BaumEigenschaften zu erhalten
– Aufwand O(lg n)
• Einfügen und Löschen sind komplizierter
• Umhängen von Zeigern
– Was ist Farbe von eingefügten Knoten?
• Rot: kann Eigenschaft 4 verletzen
• Schwarz: kann Eigenschaft 5 verletzen
• Bewahrt binäre Suchbaum-Eigenschaft
• Es gibt Links- und Rechtsrotationen
– Löschen
• Rote Knoten kein Problem
• Schwarze Knoten: kann Eigenschaften 2, 4, oder 5
verletzen
– Inverse voneinander
13
Rotationen
14
Beispiel
15
Rotationen
16
Einfügen
• Aufwand konstant, da eine konstante
Anzahl Zeiger verändert werden
• Rotationen werden also in anderen
Suchbäumen verwendet
– AVL Bäume,
Bä
SSplay
l Bä
Bäume
18
3
Eigenschaften
Wiederherstellen der Eigenschaften
1. Ok
2. Verletzt falls z die Wurzel ist, sonst Ok
3. Ok
4. Verletzt falls p[z] rot ist: sowohl z wie
auch p[z] sind rot
5. Ok
19
20
Schleifeninvariante
Schleifeninvariante
• Zu Beginn jeder Iteration der whileSchleife gilt
• Initialisierung:
a. z ist rot
b. Es gibt höchstens eine rot-schwarz
Ve let u g
Verletzung
• Terminierung:
– Folgt aus Zustand nach Einfügen
– Schleife endet weil p[z] schwarz ist, also ist
Ei
Eigenschaft
h ft 4 ok
k
– Letzte Zeile garantiert Eigenschaft 2
• Eigenschaft 2: z is die Wurzel und rot
• Eigenschaft 4: sowohl z wie auch p[z] sind rot
• Fortsetzung
– Falls z die Wurzel ist, ist p[z] der Wächter und
schwarz, und die Schleife endet
– Zu Beginn ist nur Eigenschaft 4 verletzt
21
Schleifeninvariante
22
Fall 1: y ist rot
• 6 Fälle, 3 symmetrisch zu den anderen 3
– p[z] ist entweder rechtes oder linkes Kind
– Annahme: p[z] ist linkes Kind
– y bezeichnet den Onkel von z, also den Bruder
von p[z]
• Fälle schliessen sich gegenseitig nicht aus
• p[p[z]] muss schwarz sein, weil sowohl z wie 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 sein
• Mache p[p[z]] rot => Eigenschaft 5 ok
23
• Nächste Iteration hat p[p[z]] als neues z
24
4
Fall 2: y ist schwarz, z ist rechtes Kind
Fall 3: y ist schwarz, z ist linkes Kind
• Mache p[z] schwarz und p[p[z]] rot
• Rechtsrotation um p[p[z]]
• Eigenschaft 4 ok: nicht mehr zwei
aufeinanderfolgende rote Knoten
• Linksrotation um p[z] =>
> z ist nun linkes
Kind, und z und p[z] sind rot
• p[z] ist jetzt Schwarz => keine weiteren
Iterationen
• Sind nun in Fall 3
25
Analyse
26
Löschen
• 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
– Höchstens 2 Rotationen insgesamt!
• Total: Einfügen in rot-schwarz Baum ist
O(lg n)
27
28
Löschen
Rot-schwarz Verletzungen
• y wurde ausgeschnitten
• Falls y rot, keine Verletzungen
–
–
• x ist entweder
– y‘s einziges Kind bevor y ausgeschnitten wurde
– oder der Wächter, falls y keine Kinder hatte
Keine Veränderung der Schwarz-Höhen
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
5. Jeder Pfad, der y enthält, hat jetzt einen
schwarzen Knoten weniger
• p[x] zweigt auf Knoten, der vorher y‘s
Vater war
29
30
5
Rot-schwarz Verletzungen
Reparatur
• Idee zur Reparatur: x bekommt ein
„zusätzliches“ Schwarz
• Interpretation
– Der Knoten, auf den x zeigt, hat ein
zusätzliches („gedachtes“) Schwarz, aber sein
Farbattribut wird nicht geändert
• Alle Pfade, die x enthalten, erhalten +1
schwarz
• Idee:
dee: bewege x im Baum
au nach
ac obe
oben,, b
biss
• Eigenschaft 5 repariert, aber Eigenschaft 1
verletzt
– x zeigt auf einen rot & schwarzen Knoten =>
mache x schwarz
– x zeigt auf die Wurzel => zusätzliches Schwarz
wird einfach entfernt
– Geeignete Rotationen und Umfärbungen
durchgeführt werden können
– x ist doppelt schwarz oder rot & schwarz
31
Reparatur
32
Reparatur
• In der while Schleife
– Zeigt x immer auf einen nicht-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
verlet en würde
• 8 Fälle, je 4 symmetrisch
– Hier: betrachten Fälle wo x ein linkes Kind ist
– Fälle schliessen sich gegenseitig nicht aus
• Idee: jede Transformation erhält
Eigenschaft 5
33
34
Fall 1
Fall 2
Bruder w von x ist rot
w ist schwarz und w‘s Kinder sind schwarz
• w muss schwarze Kinder haben
• Mache w schwarz und p[x] rot
• Entferne 1 Schwarz von x (=> einfach schwarz) und
1 von w (=> rot)
• Linksrotation auf p[x]
• Bewege Schwarz zu p[x]
• Neuer Bruder von x war Kind von w bevor
Rotation => muss schwarz sein
• Nächste Iteration mit p[x] als neuem x
• Gehe zu Fall 2, 3 oder 4
35
• 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
36
6
Fall 3
Fall 4
w ist schwarz, linkes Kind rot, rechtes schwarz
w ist schwarz, w‘s linkes Kind schwarz, rechtes rot
p[ ]
• Mache w die Farbe von p[x]
• Mache w rot und w‘s linkes Kind schwarz
• Mache p[x] schwarz und w‘s rechtes Kind schwarz
• Rechtsrotation auf w
• Linksrotation auf p[x]
• Neuer Bruder w von x ist schwarz mit rotem Kind
=> Fall 4
• Entferne extra schwarz auf x (=> x jetzt einfach
schwarz) ohne rot-schwarz Eigenschaften zu
verletzen
• Fertig. Lass x auf Wurzel zeigen, Schleife terminiert
37
38
Analyse
Nächstes Mal
• RB-Delete ist O(lg n)
• Ferienwoche
• RB-Delete-Fixup
• Nachher: dynamisches Programmieren
– 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öchstens 3 Rotationen total
– Total O(lg n)
39
40
7
Herunterladen