• Keine Ergebnisse gefunden

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)