VL-11: Rot-Schwarz Bäume

Werbung
VL-11: Rot-Schwarz Bäume
(Datenstrukturen und Algorithmen, SS 2017)
Janosch Fuchs
SS 2017, RWTH
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
1/41
Organisatorisches
• Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1)
Sprechstunde: Mittwoch 11:15–12:00
• Übungen: Tim Hartmann, David Korzeniewski, Björn Tauer
Email: [email protected]
• Webseite: http://algo.rwth-aachen.de/Lehre/SS17/DSA.php
• Nächste Vorlesung:
Dienstag, Mai 30, 16:15–17:45 Uhr, Aula 1
(Mai 25 = Feiertag; keine Vorlesung)
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
2/41
Rot-Schwarz Bäume
• Einführung
• Einfügen in Rot-Schwarz Bäumen
• Löschen in Rot-Schwarz Bäumen
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
3/41
Einführung
Hauptproblem der Suchbäume: Die Effizienz der Operationen hängt von
der Höhe des Baumes ab
Einerseits: Je balancierter der Suchbaum, desto besser
Andererseits: Dauerndes Rebalancieren kostet Zeit!!
Andererseits: Wie stellt man effizient fest, ob Baum balanciert ist?
Andererseits: Soll man Zusatzinformationen darüber abspeichern?
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
4/41
Einführung
Hauptproblem der Suchbäume: Die Effizienz der Operationen hängt von
der Höhe des Baumes ab
Einerseits: Je balancierter der Suchbaum, desto besser
Andererseits: Dauerndes Rebalancieren kostet Zeit!!
Andererseits: Wie stellt man effizient fest, ob Baum balanciert ist?
Andererseits: Soll man Zusatzinformationen darüber abspeichern?
Grundidee von Rot-Schwarz-Bäumen (Rudolf Bayer, 1972)
1
Zwei Arten von Knoten: Schwarze Knoten werden strikt balanciert,
rote Knoten dienen nur als Schlupf
2
Anteil der Schlupfknoten muss beschränkt bleiben
Also: aufgeweichte Balanciertheitsanforderungen, und wenig zusätzlicher
Speicherplatz (1 Bit pro Knoten für Farbe)
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
4/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
1
DSAL/SS 2017
Jeder Knoten ist entweder rot oder schwarz gefärbt.
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
1
Jeder Knoten ist entweder rot oder schwarz gefärbt.
2
Die Wurzel ist schwarz.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
1
Jeder Knoten ist entweder rot oder schwarz gefärbt.
2
Die Wurzel ist schwarz.
3
null-Zeiger (fehlendes Kind, hier enden die Pfade) betrachten wir als
externe Knoten mit Farbe schwarz.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
1
Jeder Knoten ist entweder rot oder schwarz gefärbt.
2
Die Wurzel ist schwarz.
3
null-Zeiger (fehlendes Kind, hier enden die Pfade) betrachten wir als
externe Knoten mit Farbe schwarz.
4
Jeder nicht-externe Knoten hat genau zwei Kinder.
Jeder rote Knoten hat genau zwei schwarze Kinder.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
1
Jeder Knoten ist entweder rot oder schwarz gefärbt.
2
Die Wurzel ist schwarz.
3
null-Zeiger (fehlendes Kind, hier enden die Pfade) betrachten wir als
externe Knoten mit Farbe schwarz.
4
Jeder nicht-externe Knoten hat genau zwei Kinder.
Jeder rote Knoten hat genau zwei schwarze Kinder.
5
Für jeden Knoten x gilt: alle Pfade, die im Knoten x starten und in
einem externen Knoten enden, enthalten die selbe Anzahl an
schwarzen Knoten.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
1
Jeder Knoten ist entweder rot oder schwarz gefärbt.
2
Die Wurzel ist schwarz.
3
null-Zeiger (fehlendes Kind, hier enden die Pfade) betrachten wir als
externe Knoten mit Farbe schwarz.
4
Jeder nicht-externe Knoten hat genau zwei Kinder.
Jeder rote Knoten hat genau zwei schwarze Kinder.
5
Für jeden Knoten x gilt: alle Pfade, die im Knoten x starten und in
einem externen Knoten enden, enthalten die selbe Anzahl an
schwarzen Knoten.
So ein Baum heisst dann Rot-Schwarz-Baum (red-black tree, RBT).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (1)
Rot-Schwarz-Eigenschaft
Ein binärer Suchbaum erfüllt die Rot-Schwarz-Eigenschaft, wenn gilt:
1
Jeder Knoten ist entweder rot oder schwarz gefärbt.
2
Die Wurzel ist schwarz.
3
null-Zeiger (fehlendes Kind, hier enden die Pfade) betrachten wir als
externe Knoten mit Farbe schwarz.
4
Jeder nicht-externe Knoten hat genau zwei Kinder.
Jeder rote Knoten hat genau zwei schwarze Kinder.
5
Für jeden Knoten x gilt: alle Pfade, die im Knoten x starten und in
einem externen Knoten enden, enthalten die selbe Anzahl an
schwarzen Knoten.
So ein Baum heisst dann Rot-Schwarz-Baum (red-black tree, RBT).
Anmerkung: In den Algorithmen verwenden wir für null-Zeiger (externe
Knoten) die Notation null.color (== BLACK).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
5/41
Rot-Schwarz-Bäume (2)
roter Knoten mit
Schwarz-Höhe 3
26
41
17
14
10
7
16
12 15
30
21
19
23
38
28
20
47
35
39
3
(schwarze) externe Knoten
Definition: Schwarz-Höhe (black height, bh)
Die Schwarz-Höhe eines externen Blattes bh(null) = 0.
Die Schwarz-Höhe bh(x ) eines Knotens x ist die Anzahl schwarzer
Knoten bis zu einem externen Blatt (Knoten x selbst ausgenommen).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
6/41
Rot-Schwarz-Bäume (3)
Schwarzhöhe
Zeichnet man die roten Knoten immer auf der selben Höhe wie ihren
Vater ein, dann erhält man:
17
10
3
7
26
14
12 15
21
16
19
20
41
30
23
28
35
38
39
47
Anmerkung:
Die externen Knoten werden in Zeichnungen oft weggelassen.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
7/41
Rot-Schwarz-Bäume (3)
Schwarzhöhe
Zeichnet man die roten Knoten immer auf der selben Höhe wie ihren
Vater ein, dann erhält man:
17
10
3
7
26
14
12 15
21
16
19
20
41
30
23
28
35
38
39
47
Anmerkung:
Die externen Knoten werden in Zeichnungen oft weggelassen.
Definition
Die Schwarz-Höhe bh(t) eines RBT t ist die Schwarz-Höhe der Wurzel.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
7/41
Elementare Eigenschaften von Rot-Schwarz-Bäumen
Lemma
Ein Rot-Schwarz-Baum t mit Schwarzhöhe bh(t)
enthält mindestens 2bh(t) − 1 innere Knoten.
enthält höchstens 4bh(t) − 1 innere Knoten.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
8/41
Elementare Eigenschaften von Rot-Schwarz-Bäumen
Lemma
Ein Rot-Schwarz-Baum t mit Schwarzhöhe bh(t)
enthält mindestens 2bh(t) − 1 innere Knoten.
enthält höchstens 4bh(t) − 1 innere Knoten.
Beweis: Induktion über die Höhe des Baumes.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
8/41
Elementare Eigenschaften von Rot-Schwarz-Bäumen
Lemma
Ein Rot-Schwarz-Baum t mit Schwarzhöhe bh(t)
enthält mindestens 2bh(t) − 1 innere Knoten.
enthält höchstens 4bh(t) − 1 innere Knoten.
Beweis: Induktion über die Höhe des Baumes.
Theorem
Ein RBT mit n inneren Knoten hat Höhe höchstens 2 log2 (n + 1).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
8/41
Elementare Eigenschaften von Rot-Schwarz-Bäumen
Lemma
Ein Rot-Schwarz-Baum t mit Schwarzhöhe bh(t)
enthält mindestens 2bh(t) − 1 innere Knoten.
enthält höchstens 4bh(t) − 1 innere Knoten.
Beweis: Induktion über die Höhe des Baumes.
Theorem
Ein RBT mit n inneren Knoten hat Höhe höchstens 2 log2 (n + 1).
Ergo: Ein RBT ist ein relativ balancierter BST.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
8/41
Elementare Eigenschaften von Rot-Schwarz-Bäumen
Lemma
Ein Rot-Schwarz-Baum t mit Schwarzhöhe bh(t)
enthält mindestens 2bh(t) − 1 innere Knoten.
enthält höchstens 4bh(t) − 1 innere Knoten.
Beweis: Induktion über die Höhe des Baumes.
Theorem
Ein RBT mit n inneren Knoten hat Höhe höchstens 2 log2 (n + 1).
Ergo: Ein RBT ist ein relativ balancierter BST.
Ergo: Suchen benötigt nur Θ(log n) Zeit.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
8/41
Elementare Eigenschaften von Rot-Schwarz-Bäumen
Lemma
Ein Rot-Schwarz-Baum t mit Schwarzhöhe bh(t)
enthält mindestens 2bh(t) − 1 innere Knoten.
enthält höchstens 4bh(t) − 1 innere Knoten.
Beweis: Induktion über die Höhe des Baumes.
Theorem
Ein RBT mit n inneren Knoten hat Höhe höchstens 2 log2 (n + 1).
Ergo: Ein RBT ist ein relativ balancierter BST.
Ergo: Suchen benötigt nur Θ(log n) Zeit.
Ergo: Für bstMin, bstSucc, etc. gilt dasselbe.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
8/41
Elementare Eigenschaften von Rot-Schwarz-Bäumen
Lemma
Ein Rot-Schwarz-Baum t mit Schwarzhöhe bh(t)
enthält mindestens 2bh(t) − 1 innere Knoten.
enthält höchstens 4bh(t) − 1 innere Knoten.
Beweis: Induktion über die Höhe des Baumes.
Theorem
Ein RBT mit n inneren Knoten hat Höhe höchstens 2 log2 (n + 1).
Ergo: Ein RBT ist ein relativ balancierter BST.
Ergo: Suchen benötigt nur Θ(log n) Zeit.
Ergo: Für bstMin, bstSucc, etc. gilt dasselbe.
Mit Einfügen und Löschen werden wir uns noch beschäftigen.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
8/41
Beweisskizze (zum Nachlesen zu Hause)
Lemma
Es sei x ein Knoten in einem RBT. Dann enthält der Teilbaum mit
Wurzel x mindestens 2bh(x ) − 1 innere Knoten.
Beweis: Induktion über die Höhe h(x ) des Knotens x .
Basis: Wenn h(x ) = 0, dann ist x ein Blatt.
Induktionsschritt: Wenn h(x ) ≥ 1, so hat x zwei Kinder yL und yR .
Für jedes Kind y von x gilt:
h(y ) ≤ h(x ) − 1, und
Wenn y rot, dann bh(y ) = bh(x ); andernfalls bh(y ) = bh(x ) − 1
Induktionsannahme liefert: Der Teilbaum mit Wurzel y hat mindestens
2bh(x )−1 − 1 innere Knoten.
(Teilbaum mit Wurzel yL ) plus (Teilbaum mit Wurzel yR ) plus (x ) ergibt
zusammen mindestens (2bh(x )−1 − 1) + (2bh(x )−1 − 1) + 1 = 2bh(x ) − 1
innere Knoten für den Teilbaum mit Wurzel x . qed
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
9/41
Einfügen in Rot-Schwarz Bäumen
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
10/41
Wiederholung: Einfügen in einen BST / Beispiel
Beispiel
bstIns(t, Node(18))
15
5
3
16
12
10
5
20
14
17
3
10
6
VL-11: Rot-Schwarz Bäume
16
12
31
6
DSAL/SS 2017
15
20
14
17
31
18
11/41
Einfügen von Schlüssel k in einen RBT: Grundidee
Einfügen
Zum Einfügen in einen RBT gehen wir zunächst wie beim BST vor:
Finde einen geeigneten freien Platz.
Hänge den neuen Knoten an.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
12/41
Einfügen von Schlüssel k in einen RBT: Grundidee
Einfügen
Zum Einfügen in einen RBT gehen wir zunächst wie beim BST vor:
Finde einen geeigneten freien Platz.
Hänge den neuen Knoten an.
Es bleibt die Frage nach der Farbe:
Färben wir den neuen Knoten schwarz, dann verletzen wir in der
Regel die Schwarz-Höhen-Bedingung.
Färben wir ihn aber rot, dann könnten wir die Farbbedingungen
verletzen (rote Knoten haben keine roten Kinder).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
12/41
Einfügen von Schlüssel k in einen RBT: Grundidee
Einfügen
Zum Einfügen in einen RBT gehen wir zunächst wie beim BST vor:
Finde einen geeigneten freien Platz.
Hänge den neuen Knoten an.
Es bleibt die Frage nach der Farbe:
Färben wir den neuen Knoten schwarz, dann verletzen wir in der
Regel die Schwarz-Höhen-Bedingung.
Färben wir ihn aber rot, dann könnten wir die Farbbedingungen
verletzen (rote Knoten haben keine roten Kinder).
Wir färben den Knoten daher rot (eine Schwarz-Höhen-Verletzung wäre
schwieriger zu behandeln; Rot ist lokale, schwarz ist globale Eigenschaft)
Behebe im letzten Schritt die mögliche Farbverletzung.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
12/41
Einfügen in einen RBT: Algorithmus, Teil 1
1
2
3
4
5
6
7
8
9
10
DSAL/SS 2017
void rbtIns ( Tree t , Node node ) {
// Fuege node in den Baum t ein
bstIns (t , node ) ; // Einfuegen wie beim BST
node . left = null ;
node . right = null ;
node . color = RED ;
// eingefuegter Knoten immer zunaechst rot
// stelle Rot - Schwarz - Eigenschaft ggf . wieder her
rbtInsFix (t , node ) ;
}
VL-11: Rot-Schwarz Bäume
13/41
Einfügen: Was kann passieren? (1)
c
c
node
node
node
node
c
c
Der neu eingefügte Knoten ist immer rot.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
14/41
Einfügen: Was kann passieren? (1)
c
c
node
node
node
node
c
c
Der neu eingefügte Knoten ist immer rot.
Ist Vaterknoten c schwarz, haben wir kein Problem.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
14/41
Einfügen: Was kann passieren? (1)
c
c
node
node
node
node
c
c
Der neu eingefügte Knoten ist immer rot.
Ist Vaterknoten c schwarz, haben wir kein Problem.
Ist Vaterknoten c aber rot, so liegt eine Rot-Rot-Verletzung vor, die
wir behandeln müssen.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
14/41
Einfügen: Was kann passieren? (1)
c
c
node
node
node
node
c
c
Der neu eingefügte Knoten ist immer rot.
Ist Vaterknoten c schwarz, haben wir kein Problem.
Ist Vaterknoten c aber rot, so liegt eine Rot-Rot-Verletzung vor, die
wir behandeln müssen.
Die beiden unteren Fälle lassen sich symmetrisch zu den oberen
Fällen lösen. Daher diskutieren wir nur die oberen Situationen.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
14/41
Einfügen: Was kann passieren? (2)
Wir müssen nun Grossvater d und Onkel e mit berücksichtigen:
d
c
d
e
c
e
Der Grossvater des eingefügten Knotens war schwarz, denn es
handelte sich vor dem Einfügen um einen korrekten RBT.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
15/41
Einfügen: Was kann passieren? (2)
Wir müssen nun Grossvater d und Onkel e mit berücksichtigen:
d
c
d
e
c
e
Der Grossvater des eingefügten Knotens war schwarz, denn es
handelte sich vor dem Einfügen um einen korrekten RBT.
Fall 1
Ist Onkel e rot, dann stellen wir durch Umfärben von c und e auf
schwarz sowie d auf rot die Rot-Schwarz-Eigenschaft lokal wieder her.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
15/41
Einfügen: Was kann passieren? (2)
Wir müssen nun Grossvater d und Onkel e mit berücksichtigen:
d
c
d
e
c
e
Der Grossvater des eingefügten Knotens war schwarz, denn es
handelte sich vor dem Einfügen um einen korrekten RBT.
Fall 1
Ist Onkel e rot, dann stellen wir durch Umfärben von c und e auf
schwarz sowie d auf rot die Rot-Schwarz-Eigenschaft lokal wieder her.
Zwei Ebenen weiter oben kann nun eine Rot-Rot-Verletzung
vorliegen, die nach selben Schema iterativ aufgelöst wird.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
15/41
Einfügen: Was kann passieren? (2)
Wir müssen nun Grossvater d und Onkel e mit berücksichtigen:
d
c
d
e
c
e
Der Grossvater des eingefügten Knotens war schwarz, denn es
handelte sich vor dem Einfügen um einen korrekten RBT.
Fall 1
Ist Onkel e rot, dann stellen wir durch Umfärben von c und e auf
schwarz sowie d auf rot die Rot-Schwarz-Eigenschaft lokal wieder her.
Zwei Ebenen weiter oben kann nun eine Rot-Rot-Verletzung
vorliegen, die nach selben Schema iterativ aufgelöst wird.
Ist d allerdings die Wurzel, dann färben wir sie einfach wieder
schwarz. Dadurch erhöht sich die Schwarzhöhe des Baumes um 1.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
15/41
Einfügen: Was kann passieren? (3)
Ist der Onkel e dagegen schwarz, so erhalten wir Fall 2 und Fall 3:
d
c
d
e
c
Fall 2
DSAL/SS 2017
e
Fall 3
VL-11: Rot-Schwarz Bäume
16/41
Einfügen: Was kann passieren? (3)
Ist der Onkel e dagegen schwarz, so erhalten wir Fall 2 und Fall 3:
d
c
d
e
c
Fall 2
e
Fall 3
Fall 2
Dieser Fall lässt sich durch Linksrotation um c auf Fall 3 reduzieren.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
16/41
Einfügen: Was kann passieren? (3)
Ist der Onkel e dagegen schwarz, so erhalten wir Fall 2 und Fall 3:
d
c
d
e
c
Fall 2
e
Fall 3
Fall 2
Dieser Fall lässt sich durch Linksrotation um c auf Fall 3 reduzieren.
Schwarz-Höhe des linken Teilbaumes von d ändert das nicht.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
16/41
Einfügen: Was kann passieren? (3)
Ist der Onkel e dagegen schwarz, so erhalten wir Fall 2 und Fall 3:
d
c
d
e
c
Fall 2
e
Fall 3
Fall 2
Dieser Fall lässt sich durch Linksrotation um c auf Fall 3 reduzieren.
Schwarz-Höhe des linken Teilbaumes von d ändert das nicht.
Der bisherige Vaterknoten c wird dabei zum linken, roten Kind, das
eine Rot-Rot-Verletzung mit dem neuen Vater (c im rechten Bild)
hat. Diese Verletzung wird wie im Fall 3 behoben.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
16/41
Einfügen: Was kann passieren? (4)
bh(·) = x + 1
d
x
x
c
e
x
Fall 3
Zunächst rotieren wir um d nach rechts, wobei wir die
Schwarz-Höhen im Auge behalten.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
17/41
Einfügen: Was kann passieren? (4)
bh(·) = x + 1
bh(·) = ???
c
d
x
x
c
e
−→
x
x
x +1
d
x
x
e
Fall 3
Zunächst rotieren wir um d nach rechts, wobei wir die
Schwarz-Höhen im Auge behalten.
Um die Schwarz-Höhen der Kinder von c wieder in Einklang zu
bringen, färben wir Knoten d rot. Da dessen nun linkes Kind
ursprünglich am roten c hing, ist das unproblematisch.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
17/41
Einfügen: Was kann passieren? (4)
bh(·) = x + 1
bh(·) = x
c
d
x
x
c
e
−→
x
x
x
d
x
x
e
Fall 3
Zunächst rotieren wir um d nach rechts, wobei wir die
Schwarz-Höhen im Auge behalten.
Um die Schwarz-Höhen der Kinder von c wieder in Einklang zu
bringen, färben wir Knoten d rot. Da dessen nun linkes Kind
ursprünglich am roten c hing, ist das unproblematisch.
Schlussendlich färben wir c schwarz. Wir haben wieder einen
gültigen RBT, mit unveränderter Schwarzhöhe des Gesamtbaumes.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
17/41
Einfügen: Was kann passieren? (4)
bh(·) = x + 1
bh(·) = x + 1
c
d
x
x
c
e
−→
x
x
x
d
x
x
e
Fall 3
Zunächst rotieren wir um d nach rechts, wobei wir die
Schwarz-Höhen im Auge behalten.
Um die Schwarz-Höhen der Kinder von c wieder in Einklang zu
bringen, färben wir Knoten d rot. Da dessen nun linkes Kind
ursprünglich am roten c hing, ist das unproblematisch.
Schlussendlich färben wir c schwarz. Wir haben wieder einen
gültigen RBT, mit unveränderter Schwarzhöhe des Gesamtbaumes.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
17/41
Einfügen in einen RBT: Algorithmus, Teil 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DSAL/SS 2017
// Behebe eventuelle Rot - Rot - Verletzung mit Vater
// Knoten node ist rot
void rbtInsFix ( Tree t , Node node ) {
// solange noch eine Rot - Rot - Verletzung besteht
while ( node . parent . color == RED ) {
if ( node . parent == node . parent . parent . left ) {
// der von uns betrachtete Fall
node = leftAdjust (t , node ) ;
// node jetzt weiter oben ?
// ( node = node . parent . parent im Fall 1 von
leftAdjust )
} else {
// der dazu symmetrischer Fall
node = rightAdjust (t , node ) ;
}
}
t . root . color = BLACK ; // Wurzel bleibt schwarz
}
VL-11: Rot-Schwarz Bäume
18/41
Einfügen in einen RBT: Algorithmus Teil 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DSAL/SS 2017
Node leftAdjust ( Tree t , Node node ) {
Node uncle = node . parent . parent . right ;
if ( uncle . color == RED ) { // Fall 1
node . parent . parent . color = RED ; // Grossvater
node . parent . color = BLACK ; // Vater
uncle . color = BLACK ; // Onkel
return node . parent . parent ; // pruefe Rot - Rot weiter
oben
} else { // Fall 2 und 3
if ( node == node . parent . right ) { // Fall 2
// dieser Knoten wird das linke , rote Kind :
node = node . parent ;
leftRotate (t , node ) ;
} // Fall 3
rightRotate (t , node . parent . parent ) ;
node . parent . color = BLACK ;
node . parent . right . color = RED ;
return node ; // fertig , node . parent . color == BLACK
}
}
VL-11: Rot-Schwarz Bäume
19/41
Einfügen in einen RBT: Analyse
Zeitkomplexität Einfügen
Die Worst-Case Laufzeit von rbtIns für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
20/41
Einfügen in einen RBT: Analyse
Zeitkomplexität Einfügen
Die Worst-Case Laufzeit von rbtIns für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Worst-Case Laufzeit von bstIns ist O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
20/41
Einfügen in einen RBT: Analyse
Zeitkomplexität Einfügen
Die Worst-Case Laufzeit von rbtIns für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Worst-Case Laufzeit von bstIns ist O(log n).
Die Schleife in rbtInsFix wird nur wiederholt wenn Fall 1 auftrittt.
Dann steigt der Zeiger node zwei Ebenen im Baum auf.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
20/41
Einfügen in einen RBT: Analyse
Zeitkomplexität Einfügen
Die Worst-Case Laufzeit von rbtIns für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Worst-Case Laufzeit von bstIns ist O(log n).
Die Schleife in rbtInsFix wird nur wiederholt wenn Fall 1 auftrittt.
Dann steigt der Zeiger node zwei Ebenen im Baum auf.
Die maximal Anzahl der Schleifen ist damit O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
20/41
Einfügen in einen RBT: Analyse
Zeitkomplexität Einfügen
Die Worst-Case Laufzeit von rbtIns für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Worst-Case Laufzeit von bstIns ist O(log n).
Die Schleife in rbtInsFix wird nur wiederholt wenn Fall 1 auftrittt.
Dann steigt der Zeiger node zwei Ebenen im Baum auf.
Die maximal Anzahl der Schleifen ist damit O(log n).
Es werden höchstens zwei Rotationen ausgeführt, da die Schleife in
rbtInsFix terminiert, wenn Fall 2 oder 3 auftritt. (Fall 1 involviert
keine Rotationen.)
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
20/41
Einfügen in einen RBT: Analyse
Zeitkomplexität Einfügen
Die Worst-Case Laufzeit von rbtIns für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Worst-Case Laufzeit von bstIns ist O(log n).
Die Schleife in rbtInsFix wird nur wiederholt wenn Fall 1 auftrittt.
Dann steigt der Zeiger node zwei Ebenen im Baum auf.
Die maximal Anzahl der Schleifen ist damit O(log n).
Es werden höchstens zwei Rotationen ausgeführt, da die Schleife in
rbtInsFix terminiert, wenn Fall 2 oder 3 auftritt. (Fall 1 involviert
keine Rotationen.)
Ergo: Gesamtanzahl der Rotationen ist konstant und eine Rotation
läuft in O(1).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
20/41
Einfügen in einen RBT: Analyse
Zeitkomplexität Einfügen
Die Worst-Case Laufzeit von rbtIns für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Worst-Case Laufzeit von bstIns ist O(log n).
Die Schleife in rbtInsFix wird nur wiederholt wenn Fall 1 auftrittt.
Dann steigt der Zeiger node zwei Ebenen im Baum auf.
Die maximal Anzahl der Schleifen ist damit O(log n).
Es werden höchstens zwei Rotationen ausgeführt, da die Schleife in
rbtInsFix terminiert, wenn Fall 2 oder 3 auftritt. (Fall 1 involviert
keine Rotationen.)
Ergo: Gesamtanzahl der Rotationen ist konstant und eine Rotation
läuft in O(1).
Somit benötigt rbtIns eine Gesamtzeit O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
20/41
Löschen in Rot-Schwarz Bäumen
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
21/41
Wiederholung: Löschen im BST / Strategie
Löschen
Um Knoten node aus dem BST zu löschen, verfahren wir folgendermassen:
Fall 1: node hat keine Kinder:
Ersetze im Vaterknoten von node den Zeiger auf node durch null
Fall 2: node hat ein Kind:
Wir schneiden node aus, indem wir den Vater und das Kind
direkt miteinander verbinden (den Teilbaum ersetzen).
Fall 3: node hat zwei Kinder:
Wir finden den Nachfolger von node, entfernen ihn aus seiner
ursprünglichen Position und tauschen node gegen den Nachfolger.
Anmerkung: Der Nachfolger hat höchstens ein Kind.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
22/41
Wiederholung: Löschen im BST / (k)ein Kind
15
15
10
17
14
6
15
15
5
16
5
20
12
10
14
17
20
12
3
31
10
14
17
31
6
6
DSAL/SS 2017
31
17
10
31
6
3
20
12
3
20
12
3
16
5
16
5
VL-11: Rot-Schwarz Bäume
23/41
Wiederholung: Löschen im BST / zwei Kinder
6
15
20
12
10
14
16
5
16
5
3
15
31
17
20
12
3
14
10
17
31
6
15
6
3
16
10
DSAL/SS 2017
20
12
14
VL-11: Rot-Schwarz Bäume
17
31
24/41
Löschen im RBT: Strategie (1)
Löschen
Um die Farbbedingungen aufrecht zu erhalten, müssen wir unser altes
Löschverfahren für BSTs ergänzen:
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
25/41
Löschen im RBT: Strategie (1)
Löschen
Um die Farbbedingungen aufrecht zu erhalten, müssen wir unser altes
Löschverfahren für BSTs ergänzen:
(1) Löschen wir einen roten Knoten, bleibt alles beim alten:
1
DSAL/SS 2017
Im Baum werden keine Schwarzhöhen geändert
VL-11: Rot-Schwarz Bäume
25/41
Löschen im RBT: Strategie (1)
Löschen
Um die Farbbedingungen aufrecht zu erhalten, müssen wir unser altes
Löschverfahren für BSTs ergänzen:
(1) Löschen wir einen roten Knoten, bleibt alles beim alten:
1
Im Baum werden keine Schwarzhöhen geändert
2
Es entstehen keine benachbarten roten Knoten
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
25/41
Löschen im RBT: Strategie (1)
Löschen
Um die Farbbedingungen aufrecht zu erhalten, müssen wir unser altes
Löschverfahren für BSTs ergänzen:
(1) Löschen wir einen roten Knoten, bleibt alles beim alten:
1
Im Baum werden keine Schwarzhöhen geändert
2
Es entstehen keine benachbarten roten Knoten
3
Die Wurzel bleibt schwarz.
Dieser Fall ist harmlos.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
25/41
Löschen im RBT: Strategie (1)
Löschen
Um die Farbbedingungen aufrecht zu erhalten, müssen wir unser altes
Löschverfahren für BSTs ergänzen:
(1) Löschen wir einen roten Knoten, bleibt alles beim alten:
1
Im Baum werden keine Schwarzhöhen geändert
2
Es entstehen keine benachbarten roten Knoten
3
Die Wurzel bleibt schwarz.
Dieser Fall ist harmlos.
(2) Löschen wir hingegen einen schwarzen Knoten, so ändert sich der
Schwarzwert des Pfades, der zuvor den gelöschten Knoten enthalten hat.
Diese Schwarz-Höhen-Verletzung muss repariert werden.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
25/41
Löschen im RBT: Strategie (2)
Löschen
Für den Fall, dass node zwei Kinder hat:
1
DSAL/SS 2017
Wir finden den Nachfolger von node
VL-11: Rot-Schwarz Bäume
26/41
Löschen im RBT: Strategie (2)
Löschen
Für den Fall, dass node zwei Kinder hat:
1
Wir finden den Nachfolger von node
2
Wir entfernen den Nachfolger (mittels unserer alten Prozedur
rbtDel) aus seiner ursprünglichen Position
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
26/41
Löschen im RBT: Strategie (2)
Löschen
Für den Fall, dass node zwei Kinder hat:
1
Wir finden den Nachfolger von node
2
Wir entfernen den Nachfolger (mittels unserer alten Prozedur
rbtDel) aus seiner ursprünglichen Position
3
Wir beheben dabei die möglich auftretende Farbverletzung
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
26/41
Löschen im RBT: Strategie (2)
Löschen
Für den Fall, dass node zwei Kinder hat:
1
Wir finden den Nachfolger von node
2
Wir entfernen den Nachfolger (mittels unserer alten Prozedur
rbtDel) aus seiner ursprünglichen Position
3
Wir beheben dabei die möglich auftretende Farbverletzung
4
Wir ersetzen node durch den Nachfolger, und
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
26/41
Löschen im RBT: Strategie (2)
Löschen
Für den Fall, dass node zwei Kinder hat:
1
Wir finden den Nachfolger von node
2
Wir entfernen den Nachfolger (mittels unserer alten Prozedur
rbtDel) aus seiner ursprünglichen Position
3
Wir beheben dabei die möglich auftretende Farbverletzung
4
Wir ersetzen node durch den Nachfolger, und
5
übernehmen dabei die möglicherweise neue Farbe von node.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
26/41
Löschen im RBT: Strategie (2)
Löschen
Für den Fall, dass node zwei Kinder hat:
1
Wir finden den Nachfolger von node
2
Wir entfernen den Nachfolger (mittels unserer alten Prozedur
rbtDel) aus seiner ursprünglichen Position
3
Wir beheben dabei die möglich auftretende Farbverletzung
4
Wir ersetzen node durch den Nachfolger, und
5
übernehmen dabei die möglicherweise neue Farbe von node.
Der Baum bleibt ein gültiger RBT.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
26/41
Wiederholung: Löschen im BST / Algorithmus (VL-10)
1
2
3
4
5
6
7
8
9
10
11
12
13
DSAL/SS 2017
// Entfernt node aus dem Baum .
// Danach kann node ggf . aus Speicher entfernt werden
void bstDel ( Tree t , Node node ) {
if ( node . left && node . right ) {
// zwei Kinder
Node tmp = bstMin ( node . right ) ; // finde Nachfolger
bstDel (t , tmp ) ;
// loesche Nachfolger
bstSwap (t , node , tmp ) ;
} else if ( node . left ) { // ein Kind , links
bstReplace (t , node , node . left ) ;
} else { // ein oder kein Kind ( node . right == null )
bstReplace (t , node , node . right ) ;
}
}
VL-11: Rot-Schwarz Bäume
27/41
Wiederholung: Löschen im BST / Variante von VL-10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DSAL/SS 2017
// Entfernt node aus dem Baum .
// Danach kann node ggf . aus Speicher entfernt werden
void bstDel ( Tree t , Node node ) {
if ( node . left && node . right ) {
// zwei Kinder
Node tmp = bstMin ( node . right ) ; // finde Nachfolger
bstDel (t , tmp ) ;
// loesche Nachfolger
bstSwap (t , node , tmp ) ;
} else { // ein Kind , oder kein Kind
Node child ; // Hilfsvariable
if ( node . left ) child = node . left ; // Kind ist links
else if ( node . right ) child = node . right ; // rechts
else child = null ; // kein Kind
bstReplace (t , node , child ) ;
}
}
VL-11: Rot-Schwarz Bäume
28/41
Löschen im RBT: Algorithmus, Teil 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DSAL/SS 2017
// Entfernt node aus dem Baum .
void rbtDel ( Tree t , Node node ) {
if ( node . left && node . right ) { // zwei Kinder
Node tmp = bstMin ( node . right ) ; // finde Nachfolger
rbtDel (t , tmp ) ; // loesche Nachfolger
bstSwap (t , node , tmp ) ; // ersetze node durch Nfolger
tmp . color = node . color ; // uebernimm die Farbe
} else { // ein Kind , oder kein Kind
Node child ; // Hilfsvariable
if ( node . left ) child = node . left ; // Kind ist links
else if ( node . right ) child = node . right ; // rechts
else child = null ; // kein Kind
rbtDelFix (t , node , child ) ;
bstReplace (t , node , child ) ;
}
}
VL-11: Rot-Schwarz Bäume
29/41
Löschen im RBT: Beispiel 1
rbtDel(t, 35)
23
13
7
30
18
17
23
28
13
35
7
38
30
18
28
38
17
Wie beim BST tritt der rechte Teilbaum von 35 an dessen Stelle.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
30/41
Löschen im RBT: Beispiel 1
rbtDel(t, 35)
23
13
7
30
18
17
23
28
13
35
7
38
30
18
28
38
17
Wie beim BST tritt der rechte Teilbaum von 35 an dessen Stelle.
Da einer der beiden Knoten rot ist, kann vorher die Farbe der
Knoten einfach vertauscht werden. Dazu färben wir Knoten 38
schwarz (Knoten 35 wird sowieso gelöscht).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
30/41
Löschen im RBT: Beispiel 1
rbtDel(t, 35)
23
13
7
30
18
17
23
28
13
35
7
38
30
18
28
38
17
Wie beim BST tritt der rechte Teilbaum von 35 an dessen Stelle.
Da einer der beiden Knoten rot ist, kann vorher die Farbe der
Knoten einfach vertauscht werden. Dazu färben wir Knoten 38
schwarz (Knoten 35 wird sowieso gelöscht).
Wäre auch 38 bereits schwarz gewesen, hätten wir die Verletzung
aufwändiger weiter oben beheben müssen, indem 35 seinen
Schwarzwert in Richtung Wurzel „weitergibt“.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
30/41
Löschen im RBT – Beispiel 2
rbtDel(t, 30)
23
13
7
30
18
28
23
13
2.
35
7
30
18
28
35
38
1.
17
38
17
Da Knoten 30 zwei Kinder hat, finden wir zuerst den Nachfolger.
Lösche 35 derart, dass die RBT-Eigenschaft erhalten bleibt (siehe
voriges Beispiel).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
31/41
Löschen im RBT – Beispiel 2
rbtDel(t, 30)
23
13
7
30
18
28
23
13
2.
35
7
30
18
28
35
38
1.
17
38
17
Da Knoten 30 zwei Kinder hat, finden wir zuerst den Nachfolger.
Lösche 35 derart, dass die RBT-Eigenschaft erhalten bleibt (siehe
voriges Beispiel).
Ersetze 30 durch freie 35, wobei die Farbe von 30 übernommen wird.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
31/41
Löschen im RBT – Beispiel 2
rbtDel(t, 30)
23
13
7
30
18
17
23
28
13
35
7
38
35
18
28
30
38
17
Da Knoten 30 zwei Kinder hat, finden wir zuerst den Nachfolger.
Lösche 35 derart, dass die RBT-Eigenschaft erhalten bleibt (siehe
voriges Beispiel).
Ersetze 30 durch freie 35, wobei die Farbe von 30 übernommen wird.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
31/41
Löschen im RBT: Algorithmus, Teil 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DSAL/SS 2017
// node soll geloescht werden , child ist einziges Kind
// ( bzw . node hat keine Kinder , und child == null ) ;
// Ist node rot , so ist nichts zu tun ; sonst suchen wir
// einen roten Knoten , der durch Umfaerben auf schwarz
// die schwarze Farbe von node uebernimmt
void rbtDelFix ( Tree t , Node node , Node child ) {
if ( node . color == RED ) return ;
if ( child != null && child . color == RED ) {
child . color = BLACK ;
} else {
Node searchPos = node ;
// solange Schwarzwert nicht eingefuegt werden kann
while ( searchPos . parent && searchPos . color == BLACK ) {
if ( searchPos == searchPos . parent . left ) // linkes Kind
searchPos = delLeftAdjust (t , searchPos ) ;
else // rechtes Kind
searchPos = delRight Adjust (t , searchPos ) ;
}
searchPos . color = BLACK ;
}
}
VL-11: Rot-Schwarz Bäume
32/41
Löschen im RBT: Algorithmus, Teil 3a
1
2
3
4
5
6
7
8
9
10
11
12
→
DSAL/SS 2017
// Erleichtert node um einen Schwarzwert ,
// wobei node das linke Kind ist .
Node delLeftAdjust ( Tree t , Node node ) {
// brother existiert immer wegen Schwarzhoehe
Node brother = node . parent . right ;
if ( brother . color == RED ) {
// Fall 1: Reduktion auf 2 ,3 ,4
brother . color = BLACK ;
node . parent . color = RED ; // Vater
leftRotate (t , node . parent ) ;
brother = node . parent . right ; // nun Bruder von node
}
wird auf nächster Seite fortgesetzt
VL-11: Rot-Schwarz Bäume
33/41
Löschen im RBT: Algorithmus, Teil 3b
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DSAL/SS 2017
if ( brother . left . color == BLACK &&
brother . right . color == BLACK ) { // Fall 2
brother . color = RED ;
return node . parent ; // Doppel - schwarz weiter oben ...
} else { // Fall 3 und 4
if ( brother . right . color == BLACK ) // Fall 3
brother . left . color = BLACK ;
brother . color = RED ;
rightRotate (t , brother ) ;
brother = node . parent . right ; // nun Bruder von node
} // Fall 4
brother . color = node . parent . color ;
node . parent . color = BLACK ;
brother . right . color = BLACK ;
leftRotate (t , node . parent ) ;
return t . root ; // Fertig .
}
}
VL-11: Rot-Schwarz Bäume
34/41
Der Löschalgorithmus: Fall 1
Fall 1: (Reduktion auf Fall 2, 3 oder 4)
−→
sPos
−→
brother
sPos
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
neuer
brother
35/41
Der Löschalgorithmus: Fall 2
Fall 2:
−→
c
sPos
DSAL/SS 2017
neuer
sPos
c
brother
VL-11: Rot-Schwarz Bäume
36/41
Der Löschalgorithmus: Fall 3
Fall 3: (Reduktion auf Fall 4)
−→
c
sPos
DSAL/SS 2017
−→
c
brother
VL-11: Rot-Schwarz Bäume
c
sPos
neuer
brother
37/41
Der Löschalgorithmus: Fall 4
Fall 4:
−→
−→
c
c
brother
sPos
c
d
DSAL/SS 2017
d
VL-11: Rot-Schwarz Bäume
d
38/41
Löschen im RBT: Analyse
Zeitkomplexität Löschen
Die Worst-Case Laufzeit von rbtDel für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
39/41
Löschen im RBT: Analyse
Zeitkomplexität Löschen
Die Worst-Case Laufzeit von rbtDel für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Laufzeit von rbtDel ohne Aufrufe von rbtDelFix ist O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
39/41
Löschen im RBT: Analyse
Zeitkomplexität Löschen
Die Worst-Case Laufzeit von rbtDel für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Laufzeit von rbtDel ohne Aufrufe von rbtDelFix ist O(log n).
Die Fälle 2, 3, und 4 brauchen höchstens drei Rotationen und eine
konstante Anzahl Farbänderungen.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
39/41
Löschen im RBT: Analyse
Zeitkomplexität Löschen
Die Worst-Case Laufzeit von rbtDel für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Laufzeit von rbtDel ohne Aufrufe von rbtDelFix ist O(log n).
Die Fälle 2, 3, und 4 brauchen höchstens drei Rotationen und eine
konstante Anzahl Farbänderungen.
Die Schleife in rbtDelFix wird nur wiederholt wenn Fall 2 auftrittt.
Dann steigt der Zeiger node eine Ebene im Baum hinauf.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
39/41
Löschen im RBT: Analyse
Zeitkomplexität Löschen
Die Worst-Case Laufzeit von rbtDel für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Laufzeit von rbtDel ohne Aufrufe von rbtDelFix ist O(log n).
Die Fälle 2, 3, und 4 brauchen höchstens drei Rotationen und eine
konstante Anzahl Farbänderungen.
Die Schleife in rbtDelFix wird nur wiederholt wenn Fall 2 auftrittt.
Dann steigt der Zeiger node eine Ebene im Baum hinauf.
Die maximale Anzahl der Schleifen ist damit O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
39/41
Löschen im RBT: Analyse
Zeitkomplexität Löschen
Die Worst-Case Laufzeit von rbtDel für einen Rot-Schwarz-Baum mit n
inneren Knoten ist O(log n).
Beweisskizze:
Die Laufzeit von rbtDel ohne Aufrufe von rbtDelFix ist O(log n).
Die Fälle 2, 3, und 4 brauchen höchstens drei Rotationen und eine
konstante Anzahl Farbänderungen.
Die Schleife in rbtDelFix wird nur wiederholt wenn Fall 2 auftrittt.
Dann steigt der Zeiger node eine Ebene im Baum hinauf.
Die maximale Anzahl der Schleifen ist damit O(log n).
Somit benötigt rbtDel eine Gesamtzeit O(log n).
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
39/41
Komplexität der RBT-Operationen
Operation
bstSearch
bstSucc
bstMin
bstIns
bstDel
DSAL/SS 2017
Zeit
Θ(h)
Θ(h)
Θ(h)
Θ(h)
Θ(h)
Operation
rbtIns
rbtDel
Zeit
Θ(log n)
Θ(log n)
Alle anderen Operationen wie beim
BST, wobei h = log n.
VL-11: Rot-Schwarz Bäume
40/41
Komplexität der RBT-Operationen
Operation
bstSearch
bstSucc
bstMin
bstIns
bstDel
Zeit
Θ(h)
Θ(h)
Θ(h)
Θ(h)
Θ(h)
Operation
rbtIns
rbtDel
Zeit
Θ(log n)
Θ(log n)
Alle anderen Operationen wie beim
BST, wobei h = log n.
Zusammengefasst:
Die Laufzeit für alle Operationen ist logarithmisch in der Grösse des
Rot-Schwarz-Baumes.
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
40/41
Organisatorisches
• Nächste Vorlesung:
Dienstag, Mai 30, 16:15–17:45 Uhr, Aula 1
(Mai 25 = Feiertag; keine Vorlesung)
• Webseite: http://algo.rwth-aachen.de/Lehre/SS17/DSA.php
DSAL/SS 2017
VL-11: Rot-Schwarz Bäume
41/41
Herunterladen