Beruflich Dokumente
Kultur Dokumente
Kapitel
BÄUME
(Teil
2)
BALANCIERTE
BÄUME
1. Einführung
2. Algorithmen
3. EigenschaDen
von
Programmiersprachen
4. Algorithmenparadigmen
5. Suchen
&
SorMeren
6. Hashing
7. Komplexität
von
Algorithmen
8. Abstrakte
Datentypen
(ADT)
9. Listen
10. Bäume
11. Graphen
Lernziele
des
Kapitels
2
2
¨ Verstehen,
wie
balancierter
Baum
aussieht?
¨ Kennenlernen
verschiedener
Arten
balancierter
Bäume.
¨ Kennenlernen
der
speziellen
OperaMonen,
um
balancierte
Bäume
im
Gleichgewicht
zu
halten.
Inhalt
3
Problem
4 4
4 insert (6) insert (8)
6 6
8
4
11
Ausgeglichene
Bäume
5
¨ Man
muss
dafür
sorgen,
dass
ein
Baum
bei
einer
ungünsMgen
Einfügereihenfolge
nicht
entartet.
¨ Idee:
bei
jeder
Einfüge-‐
oder
LöschoperaMon
versucht
man
den
Baum
auszugleichen.
¨ Beispiel:
insert A G F
ausgleichen
E J C I
C F I A E G J
A
Ausgeglichene
Bäume
6
o AVL-‐Bäume
(nach
G.M.
Adelson-‐Velskii
und
E.M.
Landis):
sind
höhenbalanciert.
Halten
den
Aufwand
beim
Ausgleichen
begrenzt.
o B-‐Bäume
(B
wie
balanciert,
breit,
buschig
oder
Bayer)
sind
n-‐äre
Bäume:
sind
höhenbalanciert
mit
unausgeglichenem
Verzweigungsgrad.
¨ AVL-‐Kriterium:
Für
jeden
inneren
Knoten
ist
der
absolute
Betrag
der
Differenz
der
Höhen
des
linken
und
des
rechten
Teilbaums
maximal
1.
¨ Beispiel:
Welcher
Baum
erfüllt
die
AVL-‐EigenschaD
und
welcher
nicht?
G I
D J D J
C F I C F
E E G
1) Einfügen im linken Teilbaum des linken Kindes à RotaMon mit dem linken Kind.
2) Einfügen
im
rechten
Teilbaum
des
linken
Kindes
à
DoppelrotaMon
mit
dem
linken
Kind.
3) Einfügen
im
rechten
Teilbaum
des
rechten
Kindes
à
RotaMon
mit
dem
rechten
Kind.
4) Einfügen
im
linken
Teilbaum
des
rechten
Kindes
à
DoppelrotaMon
mit
dem
rechten
Kind.
Wegen
der
Symmetrie
der
Fälle
1.
und
3.
bzw.
2.
und
4.
à
Beschränkung
auf
1.
und
2.
AVL-‐Bäume
-‐
Balancierung
10
+2
k3 0
+1 k2
Einfache Rotation 0 0
k2 (R) nach rechts
0 k1 k3
k1
Rotation von k2 über k3
+2 0
k3 Doppelrotation (LR) k1
-1 erst nach links, dann 0 0
nach rechts
k2 k2 k3
0
Rotation von k1 über k2 und k3
k1
Einfügen
im
linken
Teilbaum
des
linken
Kindes
1/2
11
1.
Einfügen
rot
=
Balance
1 2
7 7
0 1
5 Einfügen 2
5
0
2
Einfügen
im
linken
Teilbaum
des
linken
Kindes
2/2
12
1. Einfügen
rot
=
Balance
1 2
7 7
0 -1
5 Einfügen 6 5
0
6
Einfügen
im
rechtenTeilbaum
des
linken
Kindes
2/2
14
o Ausgleichen
für
den
Knoten
k
für
den
das
AVL-‐Kriterium
verletzt
ist.
Fälle:
1. Einfügen
im
linken
Teilbaum
des
linken
Kindes
à
RotaMon
des
Knotens
mit
linkem
Kind
2. Einfügen
im
rechten
Teilbaum
des
linken
Kindes.
à
DoppelrotaMon
à
RotaMon
linkes
Kind
mit
seinem
rechten
Kind
à
RotaMon
des
Knotens
mit
linken
Kind
o Die
Fälle
„Einfügen
…
des
rechten
Kindes“
sind
symmetrisch
à
hier
nicht
betrachtet.
Einfügen
–
Änderung
der
Struktur
1/2
16
// Konstruktoren
public AVLTree ( ) {
}
...
r.right = rotateRight (r.right);
TreeNode tmp = rotateLeft (r);
// tmp ist neue Wurzel
...
ImplemenMerung
–
AVL-‐Baum
-‐
Einfügen
1/8
24
o Idee
¤ Einfügen
des
neuen
Knotens
als
Blao
(wie
Binärbaum).
¤ Es gilt
¤ Rekursiv,
da
dann
Weg
von
Einfügeknoten
zu
Wurzel
verfügbar
ist.
ImplemenMerung
–
AVL-‐Baum
-‐
Einfügen
2/8
25
t.balance == 1 &&
Math.abs (t.left.balance) == 1
Anmerkung:
nach dem Einfügen kann die
Balance auf 0 sein – in dem Fall
ist der Baum jedoch bereits
balanciert
ImplemenMerung
–
AVL-‐Baum
-‐
Einfügen
6/8
29
Tb1 Tb4
Tb2 Tb3
-1 k k2 0
1
0 k2 k1 0
Tb1
Tb2 Tb3 Tb1 Tb2 Tb3
à
Man
häoe
gerne
einen
Baum,
der
noch
geringere
Tiefe
hat
als
log2
n.
Idee:
o Erhöhe
die
Basis
des
Logarithmus
(à
Mehrweg-‐Baum).
1 Seite
Wenn
die
Knoten
des
Baums
jeweils
wie
eingerahmt
auf
einer
Seite
liegen,
findet
man
einen
Wert
mit
maximal
2
Zugriffen
auf
einem
externen
Speicher,
stao
mit
max.
5
Zugriffen,
wenn
das
nicht
garanMert
ist.
Mehrwegebaum:
DefiniMon
39
o
In
einem
m-‐Wege-‐Baum
haben
alle
Knoten
den
Grad
≤
m.
o Der
Baum
ist
entweder
leer
oder
besitzt
folgende
EigenschaDen:
o Jeder
Knoten
hat
folgende
Struktur:
k1 k2 k3 k4
t0 t1 t2 t3 t4
¤ ki
sind
die
Schlüssel,
1
≤
i
≤
m-‐1.
¤ m-‐1
ist
die
Anzahl
der
Schlüssel
im
Knoten.
Beispiel: m = 5
ANZ =∑ m
m m −1
=K
−1 i
i=0
o B-‐Baum-‐Kriterium
¤ Alle
Pfade
von
der
Wurzel
bis
zu
den
Bläoern
sind
gleich
lang.
¤ Jeder Knoten – außer der Wurzel – enthält zwischen m und 2m
Schlüsselwerte.
¤ Jeder
Knoten
(außer
der
Wurzel)
hat
zwischen
m+1
und
2m+1
Kinder
(Unterbäume).
¤ Die
Wurzel
ist
entweder
ein
Blao
oder
hat
mindestens
2
Kinder.
o B-‐Baum
¤ Ein
B-‐Baum
ist
ein
Baum,
der
das
B-‐Baum-‐Kriterium
erfüllt
(für
ein
gegebenes
m).
¤ m
heißt
Ordnung
eines
B-‐Baums.
B-‐Baum
–
EigenschaDen
der
Knoten
1/2
42
geordnet:
e1 e2 e3 e4
∀ Knoten k aus b2:
∀ Elemente e aus k:
e 1 < e < e2
b1 b2 b3 b4 b5
B-‐Baum
–
EigenschaDen
der
Knoten
2/2
43
…
e1 e2 e3 ei Max. Anzahl von
Elementen: 2m
Max. Anzahl von
Unterbäumen: 2m+1
b1 b2 b3 bi bi+1
B-‐Baum
-‐
Beispiel
44
25 63
8 15 35 43 56
2 4 5 11 12 19 21 22 28 31
B-‐Baum:
DefiniMon
46
Ein
Baum
heißt
B-‐Baum
der
Ordnung
m,
wenn
er
folgende
EigenschaDen
erfüllt:
1. Jeder
Knoten
enthält
höchstens
2
⋅ m
Elemente.
2. Jeder
Knoten
außer
dem
Wurzelknoten
enthält
mindestens
m
Elemente.
Der
Wurzelknoten
enthält
mindestens
ein
Element.
3. Jeder
Knoten
ist
entweder
ein
Blao
ohne
Nachfolger
oder
hat
i+1
Nachfolger,
falls
i
die
Anzahl
der
Elemente
ist.
4. Alle
Bläoer
liegen
auf
dem
gleichen
Niveau.
5. Ist
ei
ein
Element,
dann
sind
im
linken
Nachfolgeknoten
(vi)
alle
Schlüssel
kleiner
und
im
rechten
(vi+1)
alle
größer
(Ordnungskriterium).
Bemerkung: Die Terminologie im Zusammenhang mit B-Bäumen ist in der Literatur nicht ganz einheitlich. Oft
wird auch der maximale Verzweigungsgrad (in unserem Fall 2 ⋅ m + 1) als Ordnung bezeichnet –
etwa von D. Knuth. Deshalb muss man die jeweilige Definition immer genau beachten!
B-‐Bäume:
2-‐3
Bäume
47
o Maximale
Höhe
eines
B-‐Baums
der
Ordnung
m
bei
minimaler
Füllung:
o Sind
dort
n
Knoten
unterzubringen,
gilt
für
die
Höhe
h
=
logm
n.
o Die
Höhe
eines
B-‐Baums
ist
logarithmisch
in
der
Anzahl
der
gespeicherten
Schlüssel
beschränkt.
o Die
Ordnung
eines
B-‐Baums
liegt
üblicher
Weise
bei
50
–
100.
B-‐Bäume
sind
auch
bei
einer
sehr
großen
Zahl
von
gespeicherten
Schlüsselwerten
besonders
niedrig.
o Frage:
Wie
viele
Schlüssel
kann
ein
B-‐Baum
der
Ordnung
m
=
50
bei
einer
Höhe
von
h
=
4
maximal
aufnehmen?
B-‐Bäume:
Suchen
49
o Suchen
=
KombinaMon
des
Verfolgens
von
Verweisen
(wie
im
binären
Suchbaum)
und
der
Suche
in
einer
sorMerten
Folge.
o Gesucht
wird
nach
dem
Wert
w.
o Man
beginnt
im
Wurzelknoten
und
besMmmt
dort
den
Eintrag,
für
den
gilt:
ei
≥ w.
o Ist
ei
= w,
dann
ist
man
ferMg
(man
hat
w
gefunden).
o Sonst
geht
man
zum
Knoten
vi
,
d.h.
man
folgt
dem
Verweis,
der
vor
ei
liegt.
o Gibt
es
kein
Element
mit
ei
≥ w,
dann
folgt
man
dem
letzen
Verweis
des
Knotens.
o Findet
man
den
Wert
w
auch
auf
einer
erreichten
Blaoseite
nicht,
dann
ist
der
Wert
nicht
im
Baum
enthalten.
Ein
Beispiel
B-‐Baum
50
25
10 20 31 40
2 5 7 8 13 14 17 18 22 24 26 27 28 32 38 42 43
B-‐Baum
Einfügen
1/2
51
insert 16
25
10 20
2 5 7 8 13 14 17 18 22 24
25
10 16 20
2 5 7 8 13 14 17 18 22 24
B-‐Baum
Löschen
1/3
55
o Im
Prinzip
ähnlich
wie
Einfügen
–
nur
mit
umgekehrten
Effekten.
Ein
Knoten
kann
defizitär
werden,
d.h.
durch
Entnahme
kann
die
Anzahl
der
Elemente
im
Knoten
<
m
werden.
1. Suchen
des
Knotens,
aus
dem
das
Element
w
en•ernt
werden
soll.
2. En•ernen
im
gefundenen
Knoten
–
mit
2
Fallunterscheidungen:
a) Liegt
w
in
einem
Blaoknoten,
dann
kann
das
Element
gelöscht
werden.
Bleiben
auf
dem
Blaoknoten
weniger
als
m
Elemente
übrig,
dann
ist
ein
Defizit
(Unterlauf)
zu
behandeln.
b) Liegt
w
in
einem
inneren
Knoten,
dann
wird
das
Element
gelöscht
und
durch
das
nächst
kleinere
Element
von
einem
Blaoknoten
ersetzt
(ähnlich
wie
beim
binärem
Suchbaum,
wo
man
das
größte
Element
im
linken
Teilbaum
einsetzte).
Bleiben
auf
dem
Blaoknoten
weniger
als
m
Elemente
übrig,
dann
ist
ein
Defizit
zu
behandeln.
Man
ist
am
Ende
immer
in
einem
Blaoknoten
angekommen.
B-‐Baum
Löschen
2/3
56
o Wird
auch
das
letzte
und
einzige
Element
im
Wurzelknoten
en•ernt,
dann
werden
die
beiden
darunter
liegenden
Knoten
vereinigt.
Der
Baum
schrumpD
um
eine
Ebene
von
der
Wurzel
her.
o Feststellung:
B-‐Bäume
schrumpfen
an
der
Wurzel
–
anders
als
die
bisherigen
Bäume.
B-‐Baum
Löschen
mit
Ausgleichen
58
delete 22 25
10 20 31 40
2 5 7 8 13 14 17 18 22 24 26 27 28 32 38 42 43
10 18
2 5 7 8 13 14 17 20 24
B-‐Baum
Löschen
mit
Vereinigen
59
delete 43 25
10 20 31 40 50
2 5 7 8 13 14 17 18 22 24 26 27 28 32 38 42 43
31 50
26 27 28 32 38 40 42
B-‐Baum
Einfügen-‐Variante
1/2
60
insert 16
25
10 20
2 5 7 8 13 14 17 18 22 24
25
10 18
2 5 7 8 13 14 16 17 20 22 24
o Vielleicht
die
Datenstruktur,
die
in
der
Praxis
am
meisten
benutzt
wird.
o B-‐Bäume
sind
ausgeglichene
m-‐Wege-‐Bäume.
o Man
wählt
i.A.
die
Ordnung
m
gerade
so
groß,
dass
jeweils
alle
Schlüssel
eines
B-‐Knotens
genau
einer
page
(
=
Übertra-‐
gungseinheit,
d.h.
Blockgröße
bei
einem
Lesezugriff
–
typisch
4-‐16
kByte)
entsprechen:
¤ Typische
Größen,
z.B.
m
=
50
oder
m
=
2500.
¤ Sehr
flache
Bäume.
¤ Kurzer
Weg
von
der
Wurzel
zu
den
Bläoern.
Weitere
Bäume
63
o Bruderbäume
„AVL-‐Bäume
mit
Bläoern
gleichen
Niveaus“
¤ Innere
Knoten
dürfen
nur
ein
Kind
haben
o Treaps
„randomisierte
Suchbäume“
¤ Problem:
Einfügen
einer
Folge
geordneter
Elemente
erzeugt