Rot-Schwarz-Bäume - Otto-von-Guericke

Werbung
Rot-Schwarz-Bäume
Algorithmen und Datenstrukturen I
Abstrakte Datentypen VI: Rot-Schwarz-Bäume
D. Rösner
Institut für Wissens- und Sprachverarbeitung
Fakultät für Informatik
Otto-von-Guericke Universität Magdeburg
c
Winter 2009/10, 17. Dezember 2009, 2009/10
D.Rösner
D. Rösner AuD I 2009/10 . . .
1
Rot-Schwarz-Bäume
Gliederung
1
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
D. Rösner AuD I 2009/10 . . .
2
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
Rot-Schwarz-Bäume (engl. red-black trees) sind binäre
Suchbäume, bei denen die Balanziertheit durch folgende
Bedingungen erzwungen wird (vgl. [Oka98]):
Jeder Knoten ist entweder rot oder schwarz gefärbt.
Kein roter Knoten hat ein rotes Kind.
Jeder Pfad von der Wurzel bis zu einem leeren Knoten
enthält die gleiche Anzahl schwarzer Knoten.
Bemerkungen:
Leere Knoten gelten immer als schwarz gefärbt.
Manchmal wird auch gefordert (vgl. [GT01], [Wei98]), dass
der Wurzelknoten immer schwarz sein soll. (Warum ist das
keine wirkliche Einschränkung im Hinblick auf mögliche
Formen der Bäume?)
D. Rösner AuD I 2009/10 . . .
4
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: AVL-Bäume
5
2
1
7
3
6
8
4
Abbildung: Ein AVL-Baum (vgl. [RL99], Fig. 5.6 (a))
D. Rösner AuD I 2009/10 . . .
5
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: AVL-Bäume
5
2
1
7
3
6
8
4
Abbildung: Ein AVL-Baum interpretiert als Rot-Schwarz-Baum (vgl.
[RL99], Fig. 5.6 (a))
D. Rösner AuD I 2009/10 . . .
6
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: AVL-Bäume
4
2
6
3
5
8
9
Abbildung: Ein AVL-Baum (vgl. [RL99], Fig. 5.6 (b))
D. Rösner AuD I 2009/10 . . .
7
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: AVL-Bäume
4
6
2
3
5
8
9
Abbildung: Ein AVL-Baum interpretiert als Rot-Schwarz-Baum (vgl.
[RL99], Fig. 5.6 (b))
D. Rösner AuD I 2009/10 . . .
8
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: AVL-Bäume
6
3
2
7
4
1
Abbildung: Binärer Baum ohne AVL-Eigenschaft (vgl. [RL99], Fig. 5.6
(c))
D. Rösner AuD I 2009/10 . . .
9
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: AVL-Bäume
6
3
2
7
4
1
Abbildung: Binärer Baum ohne AVL-Eigenschaft: Wie als
Rot-Schwarz-Baum interpretierbar? (vgl. [RL99], Fig. 5.6 (c))
D. Rösner AuD I 2009/10 . . .
10
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Suchbäume
5
2
6
4
3
8
9
Abbildung: Binärer Suchbaum: als Rot-Schwarz-Baum
interpretierbar? (vgl. [RL99], Ch. 5.7, Fig. 5.2 (a))
D. Rösner AuD I 2009/10 . . .
11
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Suchbäume
5
3
2
8
4
6
9
Abbildung: Binärer Suchbaum Variante: als Rot-Schwarz-Baum
interpretierbar? (vgl. [RL99], Fig. 5.2 (b))
D. Rösner AuD I 2009/10 . . .
12
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Suchbäume
5
3
2
8
4
6
9
Abbildung: Binärer Suchbaum Variante 1 als Rot-Schwarz-Baum (vgl.
[RL99], Fig. 5.2 (b))
D. Rösner AuD I 2009/10 . . .
13
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Suchbäume
5
3
2
8
4
6
9
Abbildung: Binärer Suchbaum Variante 2 als Rot-Schwarz-Baum (vgl.
[RL99], Fig. 5.2 (b))
D. Rösner AuD I 2009/10 . . .
14
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Suchbäume
5
3
2
8
4
6
9
Abbildung: Binärer Suchbaum Variante 3 als Rot-Schwarz-Baum (vgl.
[RL99], Fig. 5.2 (b))
D. Rösner AuD I 2009/10 . . .
15
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
Welche unterschiedlichen Pfadlängen sind in einem
Rot-Schwarz-Baum möglich?
Antwort:
..............................................
..............................................
Wenn jeder Pfad eines Rot-Schwarz-Baums genau B
schwarze Knoten enthält, wieviel Knoten muss der Baum
dann mindestens haben? Wieviele Knoten kann er
höchstens enthalten?
Antwort:
..............................................
..............................................
D. Rösner AuD I 2009/10 . . .
17
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
Was ist dann die maximale Höhe eines
Rot-Schwarz-Baums mit N Elementen?
Antwort:
..............................................
..............................................
..............................................
..............................................
..............................................
D. Rösner AuD I 2009/10 . . .
18
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
Wenn in einen Rot-Schwarz-Baum ein Element eingefügt
wird, dann:
der neue Knoten wird rot gefärbt, denn dann bleibt die
Anzahl schwarzer Knoten in dem betroffenen Pfad gleich
Aber: der Elternknoten des neuen Knotens könnte rot sein
und somit ein sog. Rot-Rot-Verstoss (engl. red-red
violation) entstanden sein.
Dafür gibt es vier mögliche Konfigurationen (welche?).
Alle solchen Rot-Rot-Verstösse lassen sich lokal auf
analoge Weise beheben:
der jeweilige schwarz-rot-rot-Teilpfad wird transformiert in
einen Teilbaum mit rotem Wurzelknoten und zwei
schwarzen Kindern
D. Rösner AuD I 2009/10 . . .
20
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
. . . Einfügen eines Elements fortgesetzt:
da der nun rot gefärbte Wurzelknoten des Teilbaums selbst
wieder Anlass zu einem Rot-Rot-Verstoss in Bezug auf
seinen Elternknoten sein kann, muss ggf. rekursiv dieselbe
Operation erneut bis zum Erreichen der (globalen) Wurzel
wiederholt werden
ein möglicher Rot-Rot-Verstoss in der (globalen) Wurzel
schliesslich wird dadurch behoben, dass diese dann immer
schwarz eingefärbt wird
D. Rösner AuD I 2009/10 . . .
21
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
z
y
x
a
d
c
b
Abbildung: Variante 1: Rot-Rot-Verstoss (vgl. [Oka98], Fig. 3.5)
D. Rösner AuD I 2009/10 . . .
22
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
z
x
a
d
y
b
c
Abbildung: Variante 2: Rot-Rot-Verstoss (vgl. [Oka98], Fig. 3.5)
D. Rösner AuD I 2009/10 . . .
23
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: Rot-Schwarz-Bäume
x
y
a
b
z
c
d
Abbildung: Variante 3: Rot-Rot-Verstoss (vgl. [Oka98], Fig. 3.5)
D. Rösner AuD I 2009/10 . . .
24
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: Rot-Schwarz-Bäume
x
z
a
y
b
d
c
Abbildung: Variante 4: Rot-Rot-Verstoss (vgl. [Oka98], Fig. 3.5)
D. Rösner AuD I 2009/10 . . .
25
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume
Binäre Bäume: Rot-Schwarz-Bäume
y
x
a
z
b
c
d
Abbildung: Zielstruktur zur lokalen Behebung für alle vier Varianten
eines Rot-Rot-Verstoss (vgl. [Oka98], Fig. 3.5)
D. Rösner AuD I 2009/10 . . .
26
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: AVL-Bäume
z
y
x
a
d
c
y
b
x
z
Abbildung: Variante 1:
Rot-Rot-Verstoss
a
b
c
d
Abbildung: Zielstruktur durch
Linksrotation
D. Rösner AuD I 2009/10 . . .
27
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: AVL-Bäume
z
x
d
y
a
b
y
c
x
z
Abbildung: Variante 2:
Rot-Rot-Verstoss
a
b
c
d
Abbildung: Zielstruktur durch
Links-Rechts-Rotation
D. Rösner AuD I 2009/10 . . .
28
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: AVL-Bäume
x
a
y
b
z
c
y
d
x
z
Abbildung: Variante 3:
Rot-Rot-Verstoss
a
b
c
d
Abbildung: Zielstruktur durch
Rechts-Rotation
D. Rösner AuD I 2009/10 . . .
29
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Binäre Bäume: AVL-Bäume
x
a
z
d
y
b
y
c
x
z
Abbildung: Variante 4:
Rot-Rot-Verstoss
a
b
c
d
Abbildung: Zielstruktur durch
Rechts-Links-Rotation
D. Rösner AuD I 2009/10 . . .
30
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
die folgende Implementierung in Haskell kombiniert Code
aus [Oka98] mit allgemeinem Code für binäre Suchbäume
aus [RL99]
Java-Implementationen für Rot-Schwarz-Bäume liefern
z.B. [GT01] und [Wei98]
D. Rösner AuD I 2009/10 . . .
32
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
Implementierung in Haskell
Modul
module RBTree (RBTree,emptyTree,inTree,addTree
,delTree
,buildTree, buildTree’
,inorder
) where
...
D. Rösner AuD I 2009/10 . . .
33
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
Datentypen
data Color = R|B
deriving Show
data (Ord a)
=> RBTree a = E
| T Color (RBTree a) a (RBTree a)
deriving Show
emptyTree = E
D. Rösner AuD I 2009/10 . . .
34
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
Test auf Enthaltensein
entspricht (abgesehen von Wildcard für Farbe) dem
inTree bei binären Suchbäumen
inTree v’ E
=
inTree v’ (T _ lf v rt)
| v==v’ =
| v’<v =
| v’>v =
False
True
inTree v’ lf
inTree v’ rt
D. Rösner AuD I 2009/10 . . .
35
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
Einfügen in Baum verwendet rekursive lokale Hilfsfunktion
ins
diese wiederum ruft Hilfsfunktion balance auf für den
Umgang mit möglichen Rot-Rot-Verstößen
addTree x s = T B a y b
where
ins E = T R E x E
ins s@(T color a y b) =
if x < y then balance color (ins a) y b
else if x > y then balance color a y (ins b)
else s
T _ a y b = ins s
D. Rösner AuD I 2009/10 . . .
36
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
Einfügen in Baum . . . : Bemerkungen
ein neu kreierter Knoten wird immer rot gefärbt
...
ins E = T R E x E
der oberste Wurzelknoten wird – unabhängig vom
Ergebnis von ins s – immer schwarz gefärbt
addTree x s = T B a y b
where ...
T _ a y b = ins s
D. Rösner AuD I 2009/10 . . .
37
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
Einfügen in Baum . . . : balance
wbalance
überprüft auf die vier möglichen Fälle für durch Einfügen
eines einzelnen Elements verursachte Rot-Rot-Verstöße
und
behebt diese (auf jeweils identische Weise)
in allen anderen Fällen wird der Konstruktor T aufgerufen
D. Rösner AuD I 2009/10 . . .
38
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Rot-Schwarz-Bäume: Implementierung
Einfügen in Baum . . . : balance
balance B (T R (T R a x b) y c) z d
= T R (T B a x b) y (T B c z d)
balance B (T R a x (T R b y c)) z d
= T R (T B a x b) y (T B c z d)
balance B a x (T R (T R b y c) z d)
= T R (T B a x b) y (T B c z d)
balance B a x (T R b y (T R c z d))
= T R (T B a x b) y (T B c z d)
balance color a x b = T color a x b
D. Rösner AuD I 2009/10 . . .
39
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Literatur: I
Michael T. Goodrich and Roberto Tamassia.
Data Structures and Algorithms in Java.
John Wiley & Sons, New York, 2001.
ISBN 0-471-38367-8; 2nd edition.
Chris Okasaki.
Purely Functional Data Structures.
Cambridge University Press, Cambridge, UK, 1998.
ISBN 0 521 63124 6.
Fethi Rabhi and Guy Lapalme.
Algorithms – A Functional Programming Approach.
Pearson Education Ltd., Essex, 1999.
2nd edition, ISBN 0-201-59604-0.
D. Rösner AuD I 2009/10 . . .
40
Rot-Schwarz-Bäume
Einleitung
Eigenschaften
Einfügen
Implementation
Literatur: II
Mark Allen Weiss.
Data Structures and Problem Solving using Java.
Addison Wesley Longman, Inc., Reading, Mass. USA,
1998.
ISBN 0-201-54991-3;reprinted with corrections, 1999.
D. Rösner AuD I 2009/10 . . .
41
Herunterladen