Handout 4 Binäre Suchbäume

18. M¨arz, 2015
Datenstrukturen & Algorithmen
Handout 4
Sebastian Millius, Sandro Feuz, Daniel Graf
Thema: Bin¨
are Suchb¨
aume, AVL B¨
aume
Links
· Ein gutes Visualisierungs-Applet f¨
ur AVL-B¨aume:
http://www.cs.jhu.edu/~goodrich/dsa/trees/avltree.html
(http://goo.gl/n0Bb)
· Slides von Michael Belfrage:
http://www.belfrage.net/eth/d&a/pdf/uebung4_h.pdf
(http://goo.gl/HqQwM)
· MIT OpenCourseWare: AVL Implementation in Python:
http://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/search.htm
(http://goo.gl/UR1hx)
Bin¨
are Suchb¨
aume
Ein Bin¨arer Suchbaum ist ein bin¨
arer Baum, der dem Suchbaumkriterium gen¨
ugt: F¨
ur jeden
Knoten x gilt: Die Schl¨
ussel im linken Teilbaum von x sind allesamt kleiner als der Schl¨
ussel von
x, und dieser ist wiederum kleiner als s¨amtliche Schl¨
ussel im rechten Teilbaum von x.
x
6x
>x
Einf¨
uge-Beispiel:
A
A
A
S
A
A
S
E
B
B
S
R
A
S
E
B
C
B
R
C
R
H
I
A
S
E
E
B
R
C
B
R
C
H
G
I
H
S
S
E
R
C
H
A
A
C
E
S
E
R
B
A
S
A
S
E
B
E
H
G
I
N
N
Operationen
· Suche: Die Suche kann iterativ formuliert werden
Iterative-Tree-Search(x, k)
1 while x 6= Nil and k 6= key[x]
2
if k < key[x]
3
x = lef t[x]
4
else x = right[x]
5 return x
4-1
E
I
N
· Minimum: Das Minimum (das ”linkeste” Element) in einem bin¨aren Suchbaum, kann
gefunden werden, indem man von der Wurzel immer dem linken Kind folgt
Tree-Minimum(x)
1 while lef t[x] 6=Nil
2
x = lef t[x]
3 return x
· Maximum: analog
Stop and Think: Operationen in Bin¨
aren Suchb¨
aumen Der Nachfolger eines Schl¨
ussels
x in einem bin¨
aren Suchbaum ist der kleinste Schl¨
ussel der gr¨osser als x ist. Wie kann der
Nachfolger effizient gefunden werden?
Die Komplexit¨
at der Operationen Einf¨
ugen, Suchen ... ist O(h), wobei h die H¨ohe des Baumes
ist. Bei einem bin¨
aren Suchbaum ist h zwischen log n und n, d.h. im Worst Case verh¨alt sich ein
bin¨arer Suchbaum nicht besser als eine Linked List.
vs.
perfekt balanciert
Pfad
Balancierte Suchb¨
aume garantieren eine Baumh¨ohe h = O(log n) ❀ Operationen in O(log n)
Durchlaufordnungen
Eine Durchlaufordnung ist eine Art, wie ein Baum traversiert (durchlaufen) werden kann. Folgend
die vier am h¨
aufigsten verwendeten Traversierungsm¨oglichkeiten, die - beginnend von der Wurzel
- rekursiv ausgef¨
uhrt werden k¨
onnen:
· Preorder: Wurzel, Linker Teilbaum, Rechter Teilbaum
Dies entspricht der sogenannten Tiefensuche (Depth-First-Traversal)
Think about it : Einen bin¨
aren Suchbaum mit einer gegebenen Preorder Seqeunz erh¨alt man,
in dem die Elemente der Sequenz in einen anfangs leeren bin¨aren Suchbaum einf¨
ugt.
· Postorder: Linker Teilbaum, Rechter Teilbaum, Wurzel
Think about it : Einen bin¨
aren Suchbaum mit einer gegebenen Postorder Seqeunz erh¨alt
man, in dem die Elemente der Sequenz r¨
uckw¨arts (d.h. von hinten beginnend) in einen
anfangs leeren bin¨
aren Suchbaum einf¨
gt.
· Inorder: Linker Teilbaum, Wurzel, Rechter Teilbaum
Die Knoten werden auf den Boden projeziert. Dies ergibt f¨
ur bin¨are Suchb¨aume gerade die
sortierte Liste
· Levelorder: Bei dieser Traversierung gibt man jeden Knoten eines Levels aus (von links
nach rechts), bevor man zum n¨
achst tieferen Level geht. Dieses Vorgehen ist weitgehend
als Breitensuche (Breadth-First-Search) bekannt.
4-2
AVL B¨
aume
AVL B¨aume sind balancierte bin¨
are Suchb¨aume. Sie sind benannt nach G.M. Adel’son-Vel’skii
und E.M. Landis.
AVL Baum-Strukturbedingung: die H¨ohen des linken und des rechten Teilbaums jedes Knotens unterscheiden sich h¨
ochstens um ±1.
h
h
h-1
h
h
h-1
Durch den Erhalt dieser Strukturbedingung wird erreicht, dass die H¨ohe des Baumes jeweils
O(log(n)) ist und beispielsweise nicht zu einer Liste degenerieren kann. Die Ausbalanciertheit erreicht man mittels Rotationen. Diese Rotationen sind im Buch Algorithmen und Datenstrukturen,
S. 271ff genau beschrieben. Auch hier empfiehlt sich einmal mehr, sich mittels Visualisierungstool
mit dem AVL-Baum vertraut zu machen!
Die Suche in einem AVL Baum erfolgt wie in einem nat¨
urlichen bin¨aren Suchbaum. Beim
Einf¨
ugen und Entfernen von Knoten m¨
ussen evtl. Rotationen angewendet werden um die Ausbalanciertheit zu garantieren.
· Einf¨
ugen: Einf¨
ugen wie in bin¨
arem Suchbaum, danach solange von unten nach oben rotieren (mittels Einfach- und Doppelrotationen), bis der Baum wieder balanciert ist (h¨ochstens
eine Rotation (einfach oder doppel) ist notwendig).
Es sei x der Knoten, bei dem die AVL Bedingung verletzt ist. x ist nicht der Knoten, den
wir eingef¨
ugt haben. Es k¨
onnen folgende F¨alle auftreten: der neue Knoten wurde eingef¨
ugt
im
1. linken Teilbaum des linken Kindes von x
2. rechten Teilbaum des linken Kindes von x
3. linken Teilbaum des rechten Kindes von x
4. rechten Teilbaum des rechten Kindes von x
Die F¨
alle 1 & 4 werden gel¨
ost mit einer Einfachrotation. Die F¨alle 2 & 3 mit einer Doppelrotation.
· L¨
oschen eines Knotens
– Suche nach dem Knoten
– Falls gefunden ❀ Ersetzen mit symmetrischem Nachfolger/Vorg¨ager (Blatt!)
– Bei dem Blatt beginnend nach oben: Rebalancierung
Es k¨
onnen mehrere Rotationen notwendig sein, damit diese Operation abgeschlossen und
die Strukturbedingung wieder erf¨
ullt ist.
Stop and Think: Are you AVL?
Gebe einen Algorithmus an, der f¨
ur einen bin¨aren Baum entscheidet ob dieser ein AVL Baum
ist.
4-3
Rotationen
Um die AVL-Aufgaben von Hand zu l¨osen, verf¨ahrt man am besten, wie Michael Belfrage dies
¨
auf seinen Ubungsslides
von 2008 darstellt.
http://www.belfrage.net/eth/d&a/pdf/uebung4_h.pdf (http://goo.gl/HqQwM)
x
y
h-1
y
A
h-1 B
Links-Rotation(x)
h+1
h
x
h
C
h
h-1 B
h-1 A
y
x
y
h-1
A
h
C
C
B
x
y
h-1
Links-Rotation(x)
h+1
h+1
h+1
x
h
h B
h-1 A
h
Doppelrotation:
Rechts-Rotate(y)
Links-Rotate(x)
z
h
C
h+1
y
x
h
A
h
h-1
z
D
h-1
h-1 A
B
h-1
B
oder
h-2
C
1. die unbalancierten Knoten rot f¨arben (hier x)
2. dessen schwereres Kind gr¨
un f¨
arben (hier y)
3. Fallunterscheidung
· gr¨
un’s Kinder sind gleich schwer ❀ Einfachrotation
· sonst gr¨
un’s schwereres Kind blau f¨arben (hier z)
falls rot < gr¨
un < blau ❀ Einfachrotation
sonst ❀ Doppelrotation
4-4
oder
h-2
C
D h-1
Beispiel:
x = 29: links-links Fall:
Einfachrotation 41
Insert(23)
41
20
11
29
65
20
65
50
11
29
50
26
26
23
Ok
Insert(55)
41
41
20
11
20
65
50
26
11
11
23
41
20
65
50
26
29
29
Ok
x=65: links-rechts Fall:
Doppelrotation 41
20
50
26
23
29
23
65
11
55
55
50
26
23
65
29
Stop and Think: Balancierte Suchb¨
aume Problem: Lesen von n Zahlen und Anzeigen
in sortierter Reihenfolge. Zur Verf¨
ugung steht ein balancierter Suchbaum der die Operationen
search, insert, delete, minimum, maximum, successor, predecessor in O(log n) ergm¨oglicht.
1. Wie kann man in O(n log n) sortieren mit nur insert und in-order Traversierung?
2. Wie kann man in O(n log n) sortieren mit nur minimum, successor, insert ?
3. Wie kann man in O(n log n) sortieren mit nur minimum, insert, delete?
Aufgabe
F¨
ugen Sie in einen anfangs leeren AVL-Baum folgende Schl¨
ussel der Reihe nach ein:
8, 4, 5, 12, 16, 19, 18, 3, 1, 0
Zeichnen Sie dabei den Baum nach jeder Einf¨
ugeoperation sowie nach jeder Rotation und Doppelrotation. L¨
oschen Sie danach im entstandenen Baum die Schl¨
ussel 18, 3, 4, 5, 8 der Reihe nach.
Benutzen Sie falls ben¨
otigt den symmetrischen Nachfolger. Zeichnen Sie den Baum nach jeder
L¨oschoperation und nach jeder Rotation.
4-5