AVL-tree
AVL-Bäume
- Problem von Bäumen ist, dass ein binärer Suchbaum degeneriert (nicht balanciert) sein kann. Das hat zur folge, dass ein binary tree im worst case eine Liste ist. Deswegen gibt es AVL trees
- wenn man sicherstellt, dass die Höhe der Teilbäume ungefähr gleich ist, dann ist die Höhe des Baumes
O(log n) - AVL-Bäume wurde von Adelson-Velsky und Landis entwickelt
- Ein binärer Baum heißt AVL-Baum, wenn für jeden Knoten gilt: Die Höhe seines linken und rechten Teilbaums unterscheidet sich höchstens um 1
- Durch Rotationen wird aus einem binären Suchbaum ein AVL-Baum
Links- und Rechtsrotation
!introprog-v11-baeume-avl, p.53
- man stelle sich vor, dass die Elemente Murmeln und die Pointer Schnüre sind. Hält man einen balancierten Baum an der Wurzelmurmel fest, dann sind die Murmeln ganz unten etwa auf der selben höhe. ist das nicht so, so kann man die Kindmurmel der Wurzel auf der Seite des längeren teilbaumes anfassen, was dafür sorgt, dass der Baum balanciert wird.
- konkreter gesagt muss man bei einer Linksrotation im oberen Beispiel, b als neuen rechten Kindknoten von x festlegen. y wird der Vater von x und das linke Kind von y wird x.
Beinahe-AVL-Baum
Definition:
Ein Baum heißt beinahe-AVL-Baum, wenn die AVL-Eigenschaft in jedem Knoten außer der Wurzel erfüllt ist und sich die Höhe der Unterbäume der Wurzel um höchstens 2 unterscheidet.
Fall 1: Einfache Rechtsrotation
!introprog-v11-baeume-avl, p.71
Fall 2: Doppelrotation
- B ist der Verursacher
!introprog-v11-baeume-avl, p.73 - Teile B in zwei Unterteile auf
!introprog-v11-baeume-avl, p.74 - Linksrotation
!introprog-v11-baeume-avl, p.75 - Rechtsrotation
!introprog-v11-baeume-avl, p.76
Operationen
Notes
Einfügen
logarithmische Laufzeit: O(h) = O(log n)
Löschen
Beweis für Höhe
Satz:
Für jeden AVL-Baum der Höhe
Beweis: durch Fallunterscheidung
- a)
(obere Schranke) - AVL-Baum ist Binärbaum
- Ein vollständiger Binärbaum hat eine maximale Anzahl Knoten unter allen Binärbäumen der Höhe h
N(h)= Anzahl Knoten eines vollständigen Binärbaums der Höhe h
- b)
(untere Schranke) - Beweis per Induktion über die Struktur von AVL-Bäumen
- (I.A.) Wir betrachten alle AVL-Bäume der Höhe
und . : Der Baum hat einen Knoten. Es gilt . : Der Baum hat 2 oder 3 Knoten. Es gilt .
- (I.V.) Für jeden AVL-Baum der Höhe
, gilt der Satz. - (I.S.) Sei
. Betrachte AVL-Baum der Höhe mit Wurzel . - Seien
linker bzw. rechter Teilbaum von . oder (oder beide) hat Tiefe . - Wegen AVL-Eigenschaft haben
und Tiefe mindestens . - Da
ein AVL-Baum ist, sind auch und AVL-Bäume. - Wir können (I.V.) anwenden, da
und AVL-Bäume der Tiefe sind - Es gibt drei Fälle:
haben Höhe hat Höhe und hat Höhe hat Höhe und hat Höhe
- Sei
die minimale Anzahl Knoten in einem AVL-Baum der Tiefe . - Nach (I.V.) gilt in allen drei Fällen
- Seien