II. Datenstrukturen 135
9. B¨ aume 163
9.4. Ausgeglichene B ¨aume
... /* kopiere weitere Nutzdaten */
fi /* falls notwendig:
Austausch der Daten y und z */
Beispiel f¨ur L¨oschalgorithmus
6
Komplexit ¨at der Operationen
Alle vorgestellten Operationen auf bin ¨aren Suchb ¨aumen haben die Komplexit ¨at
O(h)bei einer maximalen Baumh ¨oheh.
Alle Operationen bearbeiten nur einen Pfad von der Wurzel zu einem Knoten (Suche, Einf ¨ugen) bzw. zus ¨atzlich den direkten Pfad zum Successor-Knoten.
Ziel: hm ¨oglichst klein bei vorgegebener Zahlnvon gespeicherten Schl ¨usseln.
9.4. Ausgeglichene B ¨ aume
Wie verhindert man daß Suchb ¨aume entarten??
jeweils ausgleichen ist zu aufwendig:
5
9. B ¨aume
7 6
5 4
3 2
1
... diese Folge zeigt, daß beim Ausgleichen eventuell jeder Knoten bewegt wer-den m ¨ußte!
L¨osungsideen
abgeschw ¨achtes Kriterium f ¨ur ausgeglichene H ¨ohe Beispiel: AVL B ¨aume
ausgeglichene H ¨ohe, aber unausgeglichener Verzweigungsgrad Beispiel: B-B ¨aume
AVL-B¨aume
AVL f ¨ur Adelson-Velskii und Landis (russische Mathematiker) bin ¨are Suchb ¨aume mit AVL-Kriterium:
f ¨ur jeden (inneren) Knoten gilt: H¨ohe des linken und rechten Teilbaums differieren maximal um1
Bemerkung: es reicht nicht dieses nur f ¨ur die Wurzel zu fordern! Beide Teilb ¨aume der Wurzel k¨onnten entartet sein.
AVL-Eigenschaft am Beispiel
5
8
4 7
3 2
1
8
4
3 2
1
5 7
AVL nicht AVL
9.4. Ausgeglichene B ¨aume H¨ohe von AVL-B ¨aumen
Wieviel Knotenkminhat ein AVL-Baum der H ¨ohehmindestens?
rekursive Beziehung:
– kmin
(0)=1
– kmin
(1)=2
– kmin
(n)=k
min
(n 1)+k
min
(n 2)+1
– w ¨achst vergleichbar der Fibonacci-Reihe!
exakter Wert (Vorsicht - nicht einfach zu berechnen!):
H
AVL
(n)1:44log(n+2) 0:328
Einf¨ugen in AVL-B ¨aume
Einf ¨ugen eines Schl ¨ussels mit ¨ublichen Algorithmus Danach kann die AVL-Eigenschaft verletzt sein:
Balance=left:height right:height
AVL-Eigenschaft: balance2f 1;0;+1g
nach Einf ¨ugen:balance2f 2; 1;0;+1;+2g reparieren mittels Rotation und Doppelrotation
Fallunterscheidung beim Einf¨ugen Verletzung der AVL-Eigenschaft tritt ein bei
1. Einf ¨ugen in linken Teilbaum des linken Kindes 2. Einf ¨ugen in rechten Teilbaum des linken Kindes 3. Einf ¨ugen in linken Teilbaum des rechten Kindes 4. Einf ¨ugen in rechten Teilbaum des rechten Kindes 1 und 4 sowie 2 und 3 sind symmetrische Problemf ¨alle
9. B ¨aume
Rotation mit linkem Kind nach rechts, analoge Operation nach links (spiegel-bildlich)
Doppelrotation mit linkem Kind nach rechts, analoge Operation nach links (spie-gelbildlich)
Rotationen am Beispiel
insert 3, 2, 1 ! einfache Rotation nach rechts (2,3) insert 4, 5 ! einfache Rotation nach links (4,3)
insert 6 ! einfache Rotation (Wurzel) nach links (4,2) insert 7 ! einfache Rotation nach links (6,5)
insert 16, 15 ! Doppelrotation nach links (7,15,16) insert 13 + 12 + 11 + 10 ! jeweils einfache Rotationen insert 8, 9 ! Doppelrotation nach rechts
Rotationen in Einzelf ¨allen
Verletzung der AVL-Eigenschaft tritt ein bei
– Einf ¨ugen in linken Teilbaum des linken Kindes
!Rotation mit linkem Kind
9.4. Ausgeglichene B ¨aume – Einf ¨ugen in rechten Teilbaum des linken Kindes
!Doppelrotation mit linkem Kind
– Einf ¨ugen in linken Teilbaum des rechten Kindes
!Doppelrotation mit rechtem Kind
– Einf ¨ugen in rechten Teilbaum des rechten Kindes
!Rotation mit rechtem Kind AVL-Knoten in Java
class AvlNode f ...
Comparable: element;
AvlNode right;
AvlNode left;
int height; // initialisiert zu 0 bei Blatt ..
private static int height (AvlNode t )
f return t == null ? -1 : t.height ; g ....
g
Einf¨ugen (Skizze)
private AvlNode insert ( Comparable x, AvlNode t ) f if ( t == null ) t = new AvlNode ( x, null, null );
else if (x.compareTo (t.element ) < 0 )
f
t.left = insert ( x, t.left );
if ( height(t.left) - height(t.right) == 2 ) if ( x.compareTo (t.left.element) < 0 )
t = rotateWithLeftChild ( t );
else t = doubleWithLeftChild ( t );
g
else if (x.compareTo (t.element ) > 0 )
f analog mit rechts g;
t.height = max (height(t.left),height (t.right)) +1 ; return t;
g
Einfache Rotation in Java
private static AvlNode rotateWithLeftChild(AvlNode k2)
f
AvlNode k1 = k2.left;
k2.left = k1.right;
9. B ¨aume
k1.right = k2;
k2.height = max(height(k2.left),height (k2.right))+1;
k1.height = max(height(k1.left), k2.height))+1;
return k1;
g
Doppelte Rotation in Java
private static AvlNode doubleWithLeftChild(AvlNode k3)
f
k3.left = rotateWithRightChild ( k3.left );
return rotateWithLeftChild( k3 );
g
B-B¨aume
Idee: Baumh¨ohe vollst ¨andig ausgeglichen, aber Verzweigungsgrad variiert
Ausgangspunkt: ausgeglichener, balancierter Suchbaum
Ausgeglichen oder balanciert: alle Pfade von der Wurzel zu den Bl¨attern des Baumes gleich lang
mehrere Zugriffsattributwerte auf einer Seite
Mehrweg-B ¨aume Prinzip des B-Baumes
B-Baum von Bayer (B f ¨ur balanciert, breit, buschig, Bayer, NICHT: bin ¨ar)
dynamischer, balancierter Suchbaum Mehrwegebaum w ¨are v¨ollig ausgeglichen, wenn
1. alle Wege von der Wurzel bis zu den Bl ¨attern gleich lang 2. jeder Knoten gleich viele Eintr ¨age
vollst ¨andiges Ausgleichen w ¨are zu aufwendig, deshalb B-Baum-Kriterium:
Jede Seite außer der Wurzelseite enth ¨alt zwischenmund2mSchl ¨usselwerte
9.4. Ausgeglichene B ¨aume Eigenschaften eines B-Baumes
mheißt Ordnung des B-Baums
iSchl ¨usselwerte (mi2m) im inneren Knoten!i+1Unterb ¨aume
H¨ohe des B-Baums bei minimaler F ¨ullung:logm (n)
nDatens ¨atze)inlogm
(n)Seitenzugriffen von der Wurzel zum Blatt
Vorsicht: in einigen B ¨uchern wird als Ordnung der maximale Verzweigungsgrad bezeichnet, also hier
2m+1!
Definition B-Baum
B-Baum der Ordnungm:
1. Jede Seite enth¨alt h ¨ochstens2mElemente.
2. Jede Seite, außer der Wurzelseite, enth¨alt mindestensmElemente.
3. Jede Seite ist entweder eine Blattseite ohne Nachfolger oder hat i+1 Nach-folger, fallsidie Anzahl ihrer Elemente ist.
4. Alle Blattseiten liegen auf der gleichen Stufe.
Einf¨ugen in einen B-Baum: Ein Beispiel
Buchstaben des Wortes “ALGORITHMUS” der Reihe nach in einen B-Baum der Ordnung 1 einf ¨ugen
9. B ¨aume
Suchen in B-B ¨aumen
Startend auf Wurzelseite Eintrag im B-Baum ermitteln, der den gesuchten Schl ¨usselwertwuberdeckt¨
2 5 7 8 13 14 24 26 27 28 32 35 41 42 Einf ¨ugen eines Wertesw
Blattseite suchen
passende Seite hatn<2mElemente!weinsortieren
passende Seite hatn=2mElemente!neue Seite erzeugen – erstenmWerte auf Originalseite
9.4. Ausgeglichene B ¨aume – letztenmWerte auf neue Seite
– mittleres Element in Vaterknoten nach oben
eventuell dieser Prozeß rekursiv bis zur Wurzel – B-B ¨aume wachsen an der Wurzel!
L¨oschen in B-B ¨aumen
Problem: bei weniger alsmElementen auf Seite: Unterlauf
entsprechende Seite suchen
wauf Blattseite gespeichert
)Wert l¨oschen, eventuell Unterlauf behandeln
wnicht auf Blattseite gespeichert) – Wert l¨oschen
– durch lexikographisch n ¨achstkleineres Element von einer Blattseite er-setzen
– eventuell auf Blattseite Unterlauf behandeln analog L¨oschen in klassischen Suchbaum!
L¨oschen in B-B ¨aumen: Unterlauf Unterlaufbehandlung
Ausgleichen mit einer benachbarten Seite (benachbarte Seite hatnElemente mitn>m)
oder
– Zusammenlegen zweier Seiten zu einer (Nachbarseite hat n = m Ele-mente)
– das passende “mittlere” Element vom Vaterknoten dazu – in Vaterknoten eventuell (rekursiv) Unterlauf behandeln
! B-B ¨aume schrumpfen an der Wurzel!
9. B ¨aume
Komplexit ¨at der Operationen
Aufwand beim Einf ¨ugen, Suchen und L ¨oschen im B-Baum immerO(logm (n))
Operationen
entspricht genau der “H¨ohe” des Baumes
beliebt f ¨ur sehr große Datenbest¨ande (mit großer Knotengr¨oße):
– Konkret : Seiten der Gr¨oße 4 KB, Zugriffsattributwert 32 Bytes, 8-Byte-Zeiger: zwischen 50 und 100 Indexeintr ¨age pro Seite; Ordnung dieses B-Baumes 50
– 1.000.000 Datens ¨atze: log50
(1:000:000) = 4 Seitenzugriffe im schlechte-sten Fall
– optimiert Anzahl von der Festplatte in den Hauptspeicher zu transferie-renden Bl¨ocke!
Beispiel f¨ur Einf¨ugen und L ¨oschen im B-Baum Einf ¨ugen des Elementes 22; L¨oschen von 22
7 10 15 18 26 30
20
40 35
20 30
7 10 15 18 22 26 35 40
Praktischer Einsatz der vorgestellten Verfahren AVL in Ausbildung und Lehrb ¨uchern
B-B ¨aume “ ¨uberall im Einsatz” (einfache Einf ¨uge-Algorithmen; Knotengr¨oße an Seitengr¨oße von Hintergrundspeichern optimal anpaßbar)