Datenstrukturen Teil 3 Traversierung und AVL

Werbung
Traversierung
●
Traversierung: bezeichnet verschiede
Verfahren einer Routenbestimmung durch
baumförmige Graphen
●
Dabei wird jeder Knoten und jede Kante
nur einmal besucht
●
Traversierungsalgorithmen sind für die
effiziente Durchwanderung von Bäumen
unerlässlich
●
Es gibt vier Traversierungsmethoden
Datenstrukturen Teil 3
Traversierung und AVLBäume
Traversierung
●
Pre-Order / Hauptreihenfolge
Traversierung
●
In-Order / Symmetrische Reihenfolge
–
Ausgehend von der Wurzel wird zunächst der
linke Teilbaum abgearbeitet, danach der
rechte
–
Hier wird zunächst der linke Teilbaum
betrachtet, danach die Wurzel und zuletzt der
rechte Teilbaum
–
Dabei wird für jeden Teilbaum der
Algorithmus rekursiv aufgerufen
–
Ebenfall rekursive Abarbeitung
Traversierung
●
Post-Order / Nebenreihenfolge
Traversierung
●
Level-Order
–
Hierbei wird zunächst der linke Teilbaum,
dann der rechte Teilbaum und dann die
Wurzel betrachtet
–
Ausgehend von der Wurzel werden alle
Elemente nebeneinander (quasi von links
nach rechts) abgearbeitet
–
Ebenfalls rekursiv
–
Diese Methode ist die rechenintensivste, da
immer wieder zu Vorgängerknoten
zurückgegangen werden muß
Beispiel für Traversierungen
●
Pre-Order
–
Beispiel für Traversierungen
●
In-Order
Ergebnis: 30 15 7 9 36 34 32 35 41
–
Ergebnis: 7 9 15 30 32 34 35 36 41
Beispiel für Traversierungen
●
Post-Order
–
AVL-Bäume
●
Spezielle Binärbäume
●
Benannt nach Adel´son-Vel´skii und
Landis
●
Per Definition darf sich die Tiefe (Höhe)
eines linken Teilbaums maximal um 1 von
der Tiefe (Höhe) eines rechten Teilbaums
unterscheiden.
●
Daher ist der Baum immer maximal
balanciert
Ergebnis: 9 7 15 32 35 34 41 36 30
AVL-Bäume
●
Dies wird durch spezielle Algorithmen für
das Einfügen und Löschen von Knoten
erreicht
●
Hierzu wird für jeden Knoten der Wert
„Balance“ mitgespeichert
●
Dieser beinhaltet die Tiefendifferenz der
jeweiligen Teilbäume
●
Ist die Differenz größer als 1 oder kleiner
als -1, so wird jeweils ein bestimmter
Algorithmus ausgelöst
●
Dieser heißt Rotation
AVL-Bäume
●
Beispiel
AVL-Bäume, Rotation
●
●
Es gibt vier Rotationsarten
–
Linksrotation
–
Rechtsrotation
–
LinksRechtsrotation
–
RechtsLinksRotation
●
Linksrotation
Vorteil der AVL-Bäume
–
●
Rotation Beispiele
Immer Balanciert, dadurch minimale
Suchschrittanzahl
Nachteil der AVL-Bäume
–
Einfügen und Löschen sind komplex und
langsam
Rotation Beispiele
●
Rechtsrotation
Rotation Beispiele
●
RechtsLinksrotation
Rotation Beispiele
●
LinksRechtsrotation
AVL-Bäume, Rotation
●
●
Unterteilung in
–
Einfachrotation: Links- / Rechtsrotation
–
Doppelrotation: LinksRechts- /
RechtsLinksrotation
Einfachrotation immer dann,
–
●
Doppelrotation immer dann,
–
Beispiel Einfachrotation
wenn durch Einfügen oder Löschen ein
Höhenunterschied > 1 an einem der beiden
äußersten Teilbäume eines Zweiges eines
AVL-Baumes ergibt
wenn der Höhenunterschied an inneren
Teilbäumen auftritt
Beispiel Doppelrotation
Löschen im AVL-Baum
●
Einfügen benötigt maximal eine Rotation.
●
Löschen komplexer, da auf dem Pfad zur Wurzel ggf.
mehrere Rotationen erforderlich sind.
●
Strategie:
–
Löschen wird wie bei natürlichen Suchbäumen auf das Löschen von
Randknoten (d.h. Knoten mit höchstens einem Nachfolger)
zurückgeführt.
–
D.h. beim Löschen eines Knotens mit zwei nichtleeren Unterbäumen
("innerer Knoten") wird der „größte linke“ oder der „kleinste rechte“
Knoten verwendet.
–
Der Balancefaktor im Unterbaum des gelöschten Randknotens muß
angepaßt werden.
–
Der Balancefaktor auf allen Knoten im Pfad zur Wurzel muß (rekursiv)
überprüft und angepaßt werden.
Löschen im AVL-Baum
Löschen im AVL-Baum
Löschen im AVL-Baum
Löschen im AVL-Baum
Löschen im AVL-Baum
●
Mögliche Fälle beim Löschen sind entsprechend der
Rotation und Doppelrotation beim Einfügen:
Löschen entspricht sozusagen dem Einfügen im
gegenüberliegenden Unterbaum
●
ACHTUNG: Manchmal kann man sich nach dem
Löschen zwischen einfacher und doppelter Rotation
entscheiden!
●
ABER: Bei jedem Fall muß überprüft werden, ob
sich die Höhe des betrachteten AVL (Unter-)Baums
gegenüber der Höhe vor dem Löschen ändert
–
Falls ja: Rebalancierung rekursiv auf Elternknoten aufrufen
–
Falls nein: fertig.
Herunterladen