Balancierte Bäume AVL-Bäume Minimale Knotenanzahl von AVL

Werbung
CC
G
G
CC
Balancierte Bäume
 Aufwand, ein Element zu finden, entspricht der Tiefe des
CC
G
G
CC
 Definition für "balanciert":
gefundenen Knotens
 es gibt verschiedene Definitionen
 im worst case = Tiefe des Baumes
 Allgemein: kein Blatt ist “wesentlich weiter“ von der Wurzel entfernt als
irgendein anderes
 liegt zwischen log N+1 und N
 Hier: Für alle Knoten unterscheidet sich Anzahl der Knoten in linkem
und rechtem Teilbaum höchstens um 1
 Folge: ein binärer Baum der Tiefe log N+1
Tiefe: N-2
 schlecht balancierte Bäume
 erhält man, wenn die Elemente in sortierter Reihenfolge angeliefert
werden
 Aufwand, einen optimal balancierten Baum nach Einfüge- und
Löschoperationen zu erzwingen, ist sehr groß
G. Zachmann
Informatik 2 - SS 06
Bäume
G. Zachmann
50
CC
G
G
CC
AVL-Bäume
 AVL-Baum
Informatik 2 - SS 06
Bäume
51
CC
G
G
CC
Minimale Knotenanzahl von AVL-Bäumen
 N(h) sei die minimale Anzahl von Knoten eines AVL-Baumes der
Höhe h
 1962 von Adelson, Velskij und Landis eingeführt
 schwächere Form eines balancierten Baumes
Höhe
 Definition Balance-Faktor:
 bal(x) = (Höhe des rechten Unterbaumes von x) (Höhe des linken Unterbaumes von x)
 Definition AVL-Baum:
1
binärer Baum, wobei
für jeden Knoten x gilt:
bal(x) ∈ {-1,0,1}
-1
Knotenzahl
N(1) = 1
h=2
N(2) = 2
h=3
N(3) = 4
-1
0
0
mögliche AVL-Bäume dieser Höhe
h=1
0
1
-1
0
0
0
1
0
G. Zachmann
Informatik 2 - SS 06
Bäume
52
G. Zachmann
Informatik 2 - SS 06
Bäume
53
1
CC
G
G
CC
CC
G
G
CC
Satz:
 Allgemeiner worst case Fall bei Höhe h:
Beweis:
1) Induktionsanfang: h = 1
1
2) Induktionsschritt:
1
N(h-2)
N(h-1)
G. Zachmann
Informatik 2 - SS 06
N(h-1)
Bäume
G. Zachmann
54
CC
G
G
CC
Minimaler AVL-Baum der Höhe 10
Informatik 2 - SS 06
N(h)
Bäume
55
CC
G
G
CC
Maximale Höhe von AVL-Bäumen
 Erinnerung: Fibonacci-Zahlen
 Aus
folgt nach Umformung und Abschätzung
von F n die …
 Wichtige Eigenschaft von AVL-Bäumen:
Ein AVL-Baum mit N Knoten hat höchstens die Höhe
 Erinnerung: Die Höhe jedes binären Baumes mit N Knoten beträgt
mindestens
G. Zachmann
Informatik 2 - SS 06
Bäume
56
G. Zachmann
Informatik 2 - SS 06
Bäume
57
2
CC
G
G
CC
AVL Search Tree
CC
G
G
CC
Einfügen von Knoten
 Problem: wir wollen BST, der auch über viele Insert- und DeleteOperationen halbwegs gut balanciert bleibt
 Idee: verwende BST, der zusätzlich AVL-Eigenschaften hat
Einfügen/Löschen?
10
8
+1
-1
7
0
0
3
1
8
5
0
-1
30
0
+1
20
0
3
45
35 0
25
G. Zachmann
-1
4
60
3
G. Zachmann
58
+1
17
0
8
33
30
Informatik 2 - SS 06
0
33
0
39
0
Bäume
-1
0
39
CC
G
G
CC
14
3
0
+1
0
0
20
11
0
Ausgeglichenheit
ist verletzt
0
Bäume
17
0
+2
33
+1
26
30
60
59
Einfügen von Knoten
+1
+2
0
+1
26
G. Zachmann
17
Informatik 2 - SS 06
Einfügen von k = 30
20
0
0
0
CC
G
G
CC
11
11
+1
0
0
0
0
20
26
Einfügen von Knoten
8
0
0
Bäume
14
+1
+1
Informatik 2 - SS 06
Einfügen von k = 30
14
Einfügen von k = 30
 Problem: wie erhält man AVL-Eigenschaften bei
G. Zachmann
Informatik 2 - SS 06
-1
39
0
0
Bäume
61
3
CC
G
G
CC
Einfügen von Knoten
14
Einfügen von k = 30
8
3
+1
20
11
0
17
+2
0
8
33
+1
26
Ausbalancieren
durch Rotation
30
G. Zachmann
Informatik 2 - SS 06
-1
39
3
8
3
0
G. Zachmann
62
17
0
17
0
33
+1
26
Informatik 2 - SS 06
8
33
-1
39
39
3
63
CC
G
G
CC
+1
0
0
20
11
0
17
0
+2
26
0
33
L- Rotation
30
64
G. Zachmann
Informatik 2 - SS 06
0
0
Bäume
14
0
Bäume
-1
Einfügen von Knoten
+2
30
Informatik 2 - SS 06
0
Einfügen von k = 30
+1
26
G. Zachmann
11
+2
30
+1
20
11
0
20
R- Rotation
CC
G
G
CC
0
0
0
0
Einfügen von Knoten
14
+1
0
Bäume
Einfügen von k = 30
14
Einfügen von k = 30
0
0
CC
G
G
CC
Einfügen von Knoten
Bäume
39
65
4
CC
G
G
CC
Einfügen von Knoten
14
Einfügen von k = 30
8
3
+1
20
11
0
14
Einfügen von k = 30
0
0
CC
G
G
CC
Einfügen von Knoten
17
+2
0
8
26
3
0
0
26
11
0
20
17
33
30
G. Zachmann
Informatik 2 - SS 06
8
3
CC
G
G
CC
+1
20
11
0
17
G. Zachmann
Informatik 2 - SS 06
0
3
33
0
39
68
67
CC
G
G
CC
+1
0
0
20
11
0
17
+1
0
0
33
0
26
0
39
Bäume
0
30
0
Bäume
14
8
0
26
33
Löschen von Knoten
+1
0
0
0
Informatik 2 - SS 06
löschen von k = 8
0
0
G. Zachmann
66
Löschen von Knoten
14
0
39
Bäume
löschen von k = 8
+1
G. Zachmann
Informatik 2 - SS 06
0
39
Bäume
69
5
CC
G
G
CC
Löschen von Knoten
löschen von k = 8
-1
14
+1
löschen von k = 11
11
3
20
0
17
+1
3
33
0
26
G. Zachmann
Informatik 2 - SS 06
0
Bäume
G. Zachmann
70
+1
+2
20
17
20
0
17
0
0
33
Bäume
71
CC
G
G
CC
0
14
+2
3
20
0
17
33
0
26
0
39
Löschen von Knoten
+1
0
+1
Informatik 2 - SS 06
löschen von k = 11
3
+1
0
26
CC
G
G
CC
14
14
0
39
Löschen von Knoten
löschen von k = 11
-1
11
0
0
CC
G
G
CC
Löschen von Knoten
+1
0
0
33
0
26
0
39
0
39
L- Rotation
G. Zachmann
Informatik 2 - SS 06
Bäume
72
G. Zachmann
Informatik 2 - SS 06
Bäume
73
6
CC
G
G
CC
Löschen von Knoten
löschen von k = 11
0
14
+2
löschen von k = 11
3
20
17
+1
Informatik 2 - SS 06
0
0
3
33
0
26
G. Zachmann
20
0
0
14
0
0
CC
G
G
CC
Löschen von Knoten
33
0
17
0
26
0
39
0
39
Bäume
G. Zachmann
74
CC
G
G
CC
AVL-Rotationen
Informatik 2 - SS 06
Bäume
75
CC
G
G
CC
RR-Rotation
 Operationen auf AVL-Bäumen zur Erhaltung der AVL-Eigenschaft
 Bestehen ausschließlich aus “Umhängen” von Zeigern
+1
 Es gibt 2 verschiedene Arten von Rotationen
k1
 Single Rotation: RR und LL
0
- RR = der neue Knoten befindet sich im rechten Teilbaum des rechten
k2
Teilbaums vom (jetzt) unbalancierten Knoten aus
- LL = analog
- wird manchmal auch einfach nur R- bzw. L-Rotation genannt
 Double Rotation:
T1
- RL = neuer Knoten im linken Unterbaum des rechten Unterbaumes
- m.a.W.: vom Knoten mit dem "schlechten" Balancefaktor muß man in den
T2
T3
rechten Teilbaum gehen, dann von da aus in den linken Teilbaum, dann
kommt man zu dem neu eingefügten Knoten
- LR = analog
G. Zachmann
Informatik 2 - SS 06
Bäume
76
G. Zachmann
Informatik 2 - SS 06
Bäume
77
7
CC
G
G
CC
RR-Rotation
CC
G
G
CC
RR-Rotation
+2
+2
k1
k1
+1
+1
k2
T1
T2
k2
T1
T3
x
G. Zachmann
Informatik 2 - SS 06
G. Zachmann
78
CC
G
G
CC
Informatik 2 - SS 06
Bäume
79
CC
G
G
CC
RR Rotation Algorithm
def RR_Rotate (k1):
k2 = k1.left
k1.right = k2.left
k2.left = k2
return k2
def LL_Rotate (k2):
k1 = k2.left
k2.left = k1.right
k1.right = k2
return k1
Informatik 2 - SS 06
T3
x
Bäume
LL Rotation Algorithm
G. Zachmann
T2
Bäume
81
G. Zachmann
Informatik 2 - SS 06
Bäume
82
8
CC
G
G
CC
LR-Rotation
CC
G
G
CC
LR-Rotation
-1
-2
-2
k1
+1
0
k1
+1
k2
k2
+1
0
+1
k3
T1
T2
k3
T4
T1
T3
T2
T4
T3
x
G. Zachmann
x
Informatik 2 - SS 06
Bäume
G. Zachmann
83
CC
G
G
CC
LR-Rotation
Informatik 2 - SS 06
Bäume
CC
G
G
CC
LR-Rotation
-2
-2
k1
-1
k2
T4
T3
G. Zachmann
T2
Informatik 2 - SS 06
k3
-1
k2
T1
k1
-1
k3
-1
84
T4
T3
x
T2
T1
Bäume
85
G. Zachmann
Informatik 2 - SS 06
x
Bäume
86
9
CC
G
G
CC
LR-Rotation
CC
G
G
CC
Code
def LR_doubleRotate ( k3 ):
k3.left = RR_Rotate ( k3.left )
return LL_Rotate ( k3 )
k3
0
-1
k1
k1
k2
k2
k3
0
k3
k1
k1
D
T2
T1
G. Zachmann
A
T3
x
Informatik 2 - SS 06
T4
Bäume
C
D
neues Element x kann in B oder C sein
G. Zachmann
87
def RL_doubleRotate( k1 ):
k1.right = LL_Rotate( k1.right )
return RR_Rotate( k1 )
Informatik 2 - SS 06
B
C
(a) Before rotation
CC
G
G
CC
G. Zachmann
A
B
(b) After rotation
Informatik 2 - SS 06
Bäume
88
CC
G
G
CC
Warum Double Rotation?
 Single Rotation kann LR oder RL nicht lösen:
Bäume
89
G. Zachmann
Informatik 2 - SS 06
Bäume
90
10
CC
G
G
CC
Algo-Animation
http://webpages.ull.es/users/jriera/Docencia/AVL/AVL%20tree%20applet.htm
G. Zachmann
Informatik 2 - SS 06
Bäume
91
11
Herunterladen