Sie sind auf Seite 1von 11

CC CC

Balancierte Bäume
GG GG
CC CC

 Aufwand, ein Element zu finden, entspricht der Tiefe des  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
 liegt zwischen log N+1 und N irgendein anderes
 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 50 G. Zachmann Informatik 2 - SS 06 Bäume 51

CC CC

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


GG GG
CC CC

 AVL-Baum  N(h) sei die minimale Anzahl von Knoten eines AVL-Baumes der
 1962 von Adelson, Velskij und Landis eingeführt Höhe h
 schwächere Form eines balancierten Baumes
Höhe mögliche AVL-Bäume dieser Höhe Knotenzahl
 Definition Balance-Faktor:
 bal(x) = (Höhe des rechten Unterbaumes von x) - h=1 N(1) = 1
(Höhe des linken Unterbaumes von x)

 Definition AVL-Baum:
1 h=2 N(2) = 2
binärer Baum, wobei
-1 -1
für jeden Knoten x gilt:
bal(x) ∈ {-1,0,1} 0 0 -1 1

0 0 1 0 0 h=3 N(3) = 4

G. Zachmann Informatik 2 - SS 06 Bäume 52 G. Zachmann Informatik 2 - SS 06 Bäume 53

1
CC CC
GG GG
CC CC

 Allgemeiner worst case Fall bei Höhe h: Satz:


Beweis:
1) Induktionsanfang: h = 1

1
2) Induktionsschritt: 1

N(h-2)
N(h-1)
N(h-1) N(h)

G. Zachmann Informatik 2 - SS 06 Bäume 54 G. Zachmann Informatik 2 - SS 06 Bäume 55

CC CC

Minimaler AVL-Baum der Höhe 10 Maximale Höhe von AVL-Bäumen


GG GG
CC CC

 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 CC

AVL Search Tree


GG GG

Einfügen von Knoten


CC CC

 Problem: wir wollen BST, der auch über viele Insert- und Delete-
Operationen halbwegs gut balanciert bleibt
 Idee: verwende BST, der zusätzlich AVL-Eigenschaften hat +1
Einfügen von k = 30 14
 Problem: wie erhält man AVL-Eigenschaften bei
0 +1
Einfügen/Löschen?
+1
8 20
10

-1 -1 0 0 0 0
7 4 3 11 17 33
0 -1 0 +1
0
3 8 30 45 0 0
+1
0 26 39
0 0 35 0 60
1 5 20
0
25

G. Zachmann Informatik 2 - SS 06 Bäume 58 G. Zachmann Informatik 2 - SS 06 Bäume 59

CC CC
GG GG

Einfügen von Knoten Einfügen von Knoten


CC CC

+1 +1
Einfügen von k = 30 14 Einfügen von k = 30 14
0 +1
+2 0 +2
8 20 8 20

0 0 0 -1
0 0 0 0 -1
3 11 17 33 3 11 17 33

0
+1 0 +1 0
26 39 Ausgeglichenheit 26 39
ist verletzt

0 0
30 30
G. Zachmann Informatik 2 - SS 06 Bäume 60 G. Zachmann Informatik 2 - SS 06 Bäume 61

3
CC CC
GG GG

Einfügen von Knoten Einfügen von Knoten


CC CC

+1 +1
Einfügen von k = 30 14 Einfügen von k = 30 14
0 +2 0 +2
8 20 8 20

0 0 0 -1 0 0 0 -1
3 11 17 33 3 11 17 33

+1 0 +1 0
Ausbalancieren 26 39 26 39
durch Rotation R- Rotation

0 0
30 30
G. Zachmann Informatik 2 - SS 06 Bäume 62 G. Zachmann Informatik 2 - SS 06 Bäume 63

CC CC
GG GG

Einfügen von Knoten Einfügen von Knoten


CC CC

+1 +1
Einfügen von k = 30 14 Einfügen von k = 30 14
0 +2 0 +2
8 20 8 20

0 0 0 -1 0 0 0
3 11 17 33 3 11 17 26

+1 0
26 39 33
L- Rotation

0
30 30 39
G. Zachmann Informatik 2 - SS 06 Bäume 64 G. Zachmann Informatik 2 - SS 06 Bäume 65

4
CC CC
GG GG

Einfügen von Knoten Einfügen von Knoten


CC CC

+1 +1
Einfügen von k = 30 14 Einfügen von k = 30 14
0 +2 0 0
8 20 8 26
0
0 0 0 0 0 0
3 11 17 26 3 11 20 33
0 0
0
33 17 30 39

30 39
G. Zachmann Informatik 2 - SS 06 Bäume 66 G. Zachmann Informatik 2 - SS 06 Bäume 67

CC CC
GG GG

Löschen von Knoten Löschen von Knoten


CC CC

+1 +1
löschen von k = 8 14 löschen von k = 8 14
0 +1 0 +1
8 20 8 20
0 0
0 0 0 0 0 0
3 11 17 33 3 11 17 33
0 0 0 0
26 39 26 39

G. Zachmann Informatik 2 - SS 06 Bäume 68 G. Zachmann Informatik 2 - SS 06 Bäume 69

5
CC CC
GG GG

Löschen von Knoten Löschen von Knoten


CC CC

+1 +1
löschen von k = 8
-1 14 löschen von k = 11
-1 14
+1 +1
11 20 11 20
0 0
0 0 0 0
3 17 33 3 17 33
0 0 0 0
26 39 26 39

G. Zachmann Informatik 2 - SS 06 Bäume 70 G. Zachmann Informatik 2 - SS 06 Bäume 71

CC CC
GG GG

Löschen von Knoten Löschen von Knoten


CC CC

+1
+2 +2
löschen von k = 11
0 14 löschen von k = 11
0 14
+1 +1
3 20 3 20
0 0
0 0
17 33 17 33
0 0 0 0
26 39 26 39
L- Rotation

G. Zachmann Informatik 2 - SS 06 Bäume 72 G. Zachmann Informatik 2 - SS 06 Bäume 73

6
CC CC
GG GG

Löschen von Knoten Löschen von Knoten


CC CC

+2 0
löschen von k = 11
0 14 löschen von k = 11
0 20
+1 0
3 20 14
33
0 0
0 0 0
0 3 17
17 33 26 39
0 0
26 39

G. Zachmann Informatik 2 - SS 06 Bäume 74 G. Zachmann Informatik 2 - SS 06 Bäume 75

CC CC

AVL-Rotationen
G

RR-Rotation
G GG
CC CC

 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
- RR = der neue Knoten befindet sich im rechten Teilbaum des rechten 0
Teilbaums vom (jetzt) unbalancierten Knoten aus k2
- LL = analog
- wird manchmal auch einfach nur R- bzw. L-Rotation genannt

 Double Rotation:
T1
- RL = neuer Knoten im linken Unterbaum des rechten Unterbaumes
T2 T3
- m.a.W.: vom Knoten mit dem "schlechten" Balancefaktor muß man in den
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 CC

RR-Rotation RR-Rotation
GG GG
CC CC

+2 +2
k1 k1
+1 +1
k2 k2

T1 T1
T2 T3 T2 T3

x x
G. Zachmann Informatik 2 - SS 06 Bäume 78 G. Zachmann Informatik 2 - SS 06 Bäume 79

CC CC

LL Rotation Algorithm RR Rotation Algorithm


GG GG
CC CC

def LL_Rotate (k2): def RR_Rotate (k1):


k1 = k2.left k2 = k1.left
k1.right = k2.left
k2.left = k1.right k2.left = k2
k1.right = k2 return k2
return k1

G. Zachmann Informatik 2 - SS 06 Bäume 81 G. Zachmann Informatik 2 - SS 06 Bäume 82

8
CC CC

LR-Rotation LR-Rotation
GG GG
CC CC

-1
-2 -2
+1
0 k1 +1 k1

k2 k2
+1
0 +1
k3 k3
T4 T4
T1 T1
T2 T3 T2 T3

x x
G. Zachmann Informatik 2 - SS 06 Bäume 83 G. Zachmann Informatik 2 - SS 06 Bäume 84

CC CC

LR-Rotation LR-Rotation
GG GG
CC CC

-2 -2
-1 k1 -1 k1

k3 k3
-1 -1
k2 k2
T4 T4
T3 T3

T1 T2 x T1 T2 x

G. Zachmann Informatik 2 - SS 06 Bäume 85 G. Zachmann Informatik 2 - SS 06 Bäume 86

9
CC CC

LR-Rotation
GG GG

Code
CC CC

def LR_doubleRotate ( k3 ):
k3.left = RR_Rotate ( k3.left )
return LL_Rotate ( k3 )

0
k3
k3 k2

0
k1 k1 k3
-1 k1
k2 k1

A A B C D
T3
T2 B C

T1 x T4 neues Element x kann in B oder C sein


(a) Before rotation (b) After rotation

G. Zachmann Informatik 2 - SS 06 Bäume 87 G. Zachmann Informatik 2 - SS 06 Bäume 88

CC CC

Warum Double Rotation?


GG GG
CC CC

def RL_doubleRotate( k1 ):
k1.right = LL_Rotate( k1.right )  Single Rotation kann LR oder RL nicht lösen:
return RR_Rotate( k1 )

G. Zachmann Informatik 2 - SS 06 Bäume 89 G. Zachmann Informatik 2 - SS 06 Bäume 90

10
CC

Algo-Animation
GG
CC

http://webpages.ull.es/users/jriera/Docencia/AVL/AVL%20tree%20applet.htm

G. Zachmann Informatik 2 - SS 06 Bäume 91

11

Das könnte Ihnen auch gefallen