Kap. 4.2 Binäre Suchbäume ff Kap. 4.3: AVL-Bäume

Ähnliche Dokumente
Kap. 4.2: Binäre Suchbäume

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

13. Binäre Suchbäume

Motivation. Kap. 4.2 Binäre Suchbäume ff Kap. 4.3: AVL-Bäume. Überblick. Pseudocode von SEARCH. in binären Suchbäumen. in binären Suchbäumen

Algorithmen und Datenstrukturen Balancierte Suchbäume

Balancierte Suchbäume

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Balancierte Bäume. Minimale Knotenanzahl von AVL-Bäumen. AVL-Bäume. Definition für "balanciert":

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Copyright, Page 1 of 8 AVL-Baum

Informatik II, SS 2014

Datenstrukturen & Algorithmen

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Algorithmen und Datenstrukturen Suchbaum

1 AVL-Bäume. 1.1 Aufgabentyp. 1.2 Überblick. 1.3 Grundidee

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Informatik II, SS 2014

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Übersicht. Rot-schwarz Bäume. Rot-schwarz Bäume. Beispiel. Eigenschaften. Datenstrukturen & Algorithmen. Rot-schwarz Bäume Eigenschaften Einfügen

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Definition 15 Rot-Schwarz-Bäume sind externe Binärbäume (jeder Knoten hat 0 oder 2 Kinder) mit roten und schwarzen Kanten, so dass gilt:

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Informatik II, SS 2014

Balancierte Bäume. Martin Wirsing. in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer. SS 06

Dynamische Mengen. Realisierungen durch Bäume

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen Kapitel 7 Dynamische Mengen, das Suchproblem &

14. Rot-Schwarz-Bäume

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

3.6 AVL-Bäume. (AVL = Adel son-velskii und Landis (1962)) . Seite 326/726

Teil 1: Suchen. Problemstellung Elementare Suchverfahren Hashverfahren Binäre Suchbäume Ausgeglichene Bäume. B-Bäume Digitale Suchbäume Heaps

Programmiertechnik II

Leitprogramm der Informatik Binäre Suchbäume

Praktische Informatik I - Algorithmen und Datenstrukturen Wintersemester 2006/07

Abschnitt 18: Effizientes Suchen in Mengen

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Übung Algorithmen I

Informatik II Vorlesung am D-BAUG der ETH Zürich

Suchen und Sortieren Binäre Suchbäume

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 11, Donnerstag, 15.

Termine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Wintersemester 2007/2008 Helmut Seidl Institut für Informatik TU München

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

11. Elementare Datenstrukturen

Proseminar Kodierverfahren bei Dr. Ulrich Tamm Sommersemester 2003 Thema: Codierung von Bäumen (Prüfer Codes...)

Vorlesung Datenstrukturen

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

7. Sortieren Lernziele. 7. Sortieren

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 10, Donnerstag 8.

Algorithmen und Datenstrukturen

11.1 Grundlagen - Denitionen

Übung zur Vorlesung Algorithmische Geometrie

Datenstrukturen & Algorithmen

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Suchen und Sortieren

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Binäre Bäume Darstellung und Traversierung

2 i. i=0. und beweisen Sie mittels eines geeigneten Verfahrens die Korrektheit der geschlossenen Form.

13. Bäume: effektives Suchen und Sortieren

3. Übungsblatt zu Algorithmen I im SoSe 2017

Kurs 1613 Einführung in die imperative Programmierung

Binäre Suchbäume. Ein Leitprogramm von Timur Erdag und Björn Steffen

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / 2014 Vorlesung 11, Donnerstag, 16.

10. Kapitel (Teil1) BÄUME GRUNDLAGEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

Änderung zur Übung. Kap. 4.4: B-Bäume. Motivation. Überblick. Motivation für B-Bäume. B-Bäume. Warum soll ich heute hier bleiben?

Kapitel 9 Suchalgorithmen

Programmierung und Modellierung

Kapitel 9 Suchalgorithmen

Algorithmen und Datenstrukturen 1

Kapiteltests zum Leitprogramm Binäre Suchbäume

BÄUME BALANCIERTE BÄUME. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm. 10. Kapitel (Teil 2)

Geordnete Binärbäume

RWTH Aachen, Lehrstuhl für Informatik IX Kapitel 3: Suchen in Mengen - Datenstrukturen und Algorithmen - 51

7. Übung Algorithmen I

Tutoraufgabe 1 (Vollständige Induktion): Tutoraufgabe 2 (Rotationen): Datenstrukturen und Algorithmen SS15 Übungsblatt 5 (Abgabe 3.6.

Suchbäume mit inneren Knoten verschiedener Knotengrade.

Suchbäume balancieren

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

Bäume Jiri Spale, Algorithmen und Datenstrukturen - Bäume 1

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Binärbäume: Beispiel

Sortierte Folgen 250

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Algorithmen und Datenstrukturen SS09

1. Übungsblatt zu Algorithmen II im WS 2011/2012

Seminarausarbeitung Entwurf und Analyse von Datenstrukturen. Splay Trees. Mirco Lukas und Alexander Werthmann. Datum:

Einführung in die Informatik 2

Verkettete Datenstrukturen: Bäume

Höhe eines B + -Baums

Grundlagen: Algorithmen und Datenstrukturen

2.5.1 Binäre Suchbäume Optimale Suchbäume Balancierte Bäume Skip-Listen Union-Find-Strukturen

Transkript:

Kap. 4.2 Binäre Suchbäume ff Kap. 4.3: AVL-Bäume Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 12./13. VO DAP2 SS 2009 28.5./2.6.2009 1

Motivation Warum soll ich heute hier bleiben? Balancierte Bäume brauchen Sie immer wieder! Was gibt es heute Besonderes? Schöne Animationen: Rotationen 2

Überblick Kurz-Wiederholung binäre Suchbäume + Pseudocode Einführung von AVL-Bäumen Implementierung der Operationen Schönes Java-Applet 3

Implementierung Worst Case Analyse von von SEARCH(r,s) BinarySearch in binären Suchbäumen Wiederholung 1. Vergleiche s mit dem Schlüssel r.key an der Wurzel r (des Teilbaums) 2. Falls gefunden: STOP! 3. Sonst: Falls s < r.key: suche im linken Teilbaum 4. Sonst: suche im rechten Teilbaum 5. Gehe zu 1. 6. Ausgabe: nicht gefunden! 4

Pseudocode von SEARCH Eingabe: Baum mit Wurzel p; Schlüssel s Ausgabe: Knoten mit Schlüssel s oder nil, falls s nicht da Function SEARCH(p,s):TreeNode (1) while p nil p.key s do { (2) if s < p.key then (3) p:=p.left (4) else p:=p.right (5) } (6) return p 5

Implementierung Worst Case Analyse von von INSERT(r,q) BinarySearch in binären Suchbäumen Einfügen eines Knotens q mit Schlüssel s und Wert v in den Baum mit Wurzel r, falls noch nicht vorhanden; sonst Wert überschreiben mit v 1. Suche nach s 2. Falls die Suche erfolgreich endet, dann gilt p.key==s; Dann: p.info:=v 3. Sonst: endet mit der Position eines leeren Unterbaums: Einfügen von q an diese Position 6

Pseudocode von INSERT Eingabe: Baum mit Wurzel root; Schlüssel s und Wert v Prozedur INSERT(root,s,v):TreeNode (1) var TreeNode r,p (2) r:=nil; p:=root (3) while p nil do { (4) r:=p // r ist der zuletzt besucht Knoten (5) if s < p.key then (6) p:=p.left (7) else if s > p.key then p:=p.right (8) else { // s==p.key (9) p.info := v (10) return (11) } } //end while

Pseudocode von INSERT ff // Suche endet an leerem Unterbaum // r ist letzter nicht-leerer Knoten (12) q := new TreeNode (13) q.parent := r (14) q.key := s (15) q.info := v (16) if r == nil then (17) root := q // neuen Knoten in leeren Baum einfügen (18) else if q.key < r.key then r.left := q (19) else r.right := q

Worst Case Analyse von BinarySearch Predecessor-Suche 5 15 16 Predecessor(15) = 13 Predecessor(13) = 12 Predecessor( 6) = 5 3 12 20 10 13 18 23 6 7 9

Worst Case Analyse von BinarySearch Implementierung von PREDECESSOR(r,p) 1. Falls p linkes Kind hat: Return Maximum(p.left) 2. Sonst: Falls p rechtes Kind ist: Return(p.parent) 3. Sonst: wandere solange nach oben bis der aktuelle Knoten zum ersten Mal rechtes Kind ist; dann: Return(p.parent) 4. oder die Wurzel erreicht ist; dann: existiert kein Vorgänger (größter Knoten mit key p.key). 10

Pseudocode von PREDECESSOR Eingabe: Knoten p nil Ausgabe: Vorgänger von Knoten p in Inorder-Traversierung Function PREDECESSOR(p):TreeNode (1) var TreeNode q // q ist parent von p (2) if p.left nil then (3) return MAXIMUM(p.left) (4) else { (5) q:=p.parent (6) while q nil and p==q.left do { (7) p := q (8) q := q.parent (9) } (10) return q }

Worst Case Analyse von BinarySearch Implementierung von MAXIMUM 1. Wir durchlaufen von Wurzel aus rekursiv den rechten Unterbaum, bis wir auf ein leeres Kind treffen. 2. Der letzte durchlaufene Knoten enthält dann den größten Schlüssel. Pseudocode: Eingabe: nichtleerer Baum mit Wurzel p nil Ausgabe: Knoten im Baum mit kleinstem Schlüssel Function MINIMUM(p):TreeNode (1) while p.right nil do p:=p.right (2) return p 12

Worst Case Analyse von BinarySearch Beispiel für DELETE(r,q) 15 5 16 3 12 20 10 13 18 23 Fall 1: q ist Blatt 6 7 13

Worst Case Analyse von BinarySearch Beispiel für DELETE(r,q) 15 Fall 2: q hat genau ein Kind 5 16 3 12 20 10 13 18 23 6 7 14

Worst Case Analyse von BinarySearch Beispiel für DELETE(r,q) 15 Fall 3: q hat genau 2 Kinder 5 16 3 12 20 Predecessor(q): 10 13 18 23 6 7 15

Worst Case Analyse von BinarySearch Beispiel für DELETE(r,q) 15 Fall 3: q hat genau 2 Kinder 5 16 3 12 20 Predecessor(q): 10 13 18 23 6 7 16

Worst Case Analyse von BinarySearch Beispiel für DELETE(r,q) 15 Fall 3: q hat genau 2 Kinder 5 16 3 12 10 20 Predecessor(q): 10 13 18 23 6 7 17

Worst Case Analyse von BinarySearch Beispiel für DELETE(r,q) 15 Fall 3: q hat genau 2 Kinder 5 16 3 12 10 20 Predecessor(q): 6 13 18 23 7 18

Worst Implementierung Case Analyse von von DELETE(r,q) BinarySearch in binären Suchbäumen Entfernt Knoten q im Baum mit Wurzel r 1. Suche nach q.key Suche endet an Knoten v 2. Falls v nil, dann 3. Falls v keine Kinder besitzt, dann: streiche v 4. Falls v genau ein Kind hat: ändere 2 Zeiger ( herausschneiden ) 5. Falls v zwei Kinder hat, dann hat y:=predecessor(v) kein rechtes Kind (warum??): Herausschneiden bzw. Entfernen von y und Ersetzen von q durch y. 19

Pseudocode von DELETE Eingabe: Baum mit Wurzel root; Schlüssel s (existiert!) Entfernt Knoten mit Schlüssel s aus Baum Prozedur DELETE(root,s) (1) var TreeNode r,p,q // r wird herausgeschnitten (2) q := SEARCH(root,s) (3) if q.left == nil or q.right==nil then (4) r := q (5) else { (6) r:=predecessor(q) // Vorgänger existiert (7) q.key := r.key; q.info := r.info //Umhängen der Daten von r nach q (8) } 20

Pseudocode von DELETE ff // jetzt löschen wir Knoten r mit maximal einem Kind // lasse p auf Kind von r zeigen (falls Kind ex.) (9) if r.left nil then p := r.left else p:=r.right (10) if p nil then p.parent := r.parent //neuer Elter von p wird Elter von r (11) if r.parent == nil then root := p // neuer Elter von p wird Elter von r (12) else if r == r.parent.left then (13) r.parent.left := p // p wird linker Nachfolger (14) else r.parent.right := p // p wird rechter Nachfolger 21

Worst Case Analyse von BinarySearch Analyse der Operationen 1. Alle Operationen benötigen eine Laufzeit von O(h(T)) für binäre Suchbäume, wobei h(t) die Höhe des gegebenen Suchbaumes T ist. Frage: Wie hoch kann h(t) für einen binären Suchbaum mit n Knoten sein? 22

Abhängigkeit der Höhe von Worst Case Analyse von BinarySearch der Einfügereihenfolge Einfügereihenfolge: 1,3,4,6,8,9 Baum ist zu linearer Liste degeneriert Problem: Suchzeit ist linear, da h(t)=n-1 Einfügereihenfolge: 6,8,3,4,1,9 1 3 4 6 6 3 8 8 1 4 9 9 23

Kap. 4.3: AVL-Bäume 24

AVL-Bäume sind sogenannte balancierte Bäume. Balancierte Bäume versuchen sich regelmäßig wieder auszubalancieren, um zu garantieren, dass die Höhe logarithmisch bleibt. Hierfür gibt es verschiedene Möglichkeiten: höhenbalancierte Bäume gewichtsbalancierte Bäume (a,b)-bäume Balancierte Bäume Um die bisherigen binären Suchbäume von den balancierten Bäumen abzugrenzen, nennt man erstere auch natürliche binäre Suchbäume. 25

Balancierte Bäume Höhenbalancierte Bäume: Die Höhen der Unterbäume eines Knotens unterscheiden sich um höchstens eine Konstante AVL-Bäume Gewichtsbalancierte Bäume: Die Anzahl der Knoten in den Unterbäumen jedes Knotens unterscheidet sich höchstens um eine Konstante. (a,b)-bäume (2 a b): Jeder innere Knoten (außer der Wurzel) hat zwischen a und b Kinder und alle Blätter haben den gleichen Abstand zur Wurzel. B-Bäume: s. Kap. 4.4 26

Definitionen für AVL-Bäume Höhe eines Knotens: Länge eines längsten Pfades von v zu einem Nachkommen von v Höhe eines Baumes: Höhe seiner Wurzel Höhe eines leeren Baumes: -1 Balance eines Knotens: bal(v)=h 2 -h 1, wobei h 1 und h 2 die Höhe des linken bzw. rechten Unterbaumes von v bezeichnen v heißt balanciert: wenn bal(v) {-1,0,+1}, sonst heißt v unbalanciert 27

Worst Case Analyse von BinarySearch h(3)=1 h(8)=0 h(wurzel)=2 bal(3)=0 bal(7)=1 bal(wurzel)=0 Bezeichnungen Tiefe Höhe 2 3 5 5 7 Wurzel d(3)=1 d(8)=2 d(wurzel)=0 Höhe h(v): Länge eines längsten Pfades von v zu einem Nachkommen von v Höhe h(t r ) eines (Teil-)baumes T r mit Wurzel r: max { d(v): v ist Knoten in T r } 8 Beispiele für balanciert üben! h(t 3 )=1 h(t 8 )=0 h(t Wurzel )=2 = Höhe seiner Wurzel

AVL-Bäume Definition: Ein AVL-Baum ist ein binärer Suchbaum, bei dem alle Knoten balanciert sind. AVL-Bäume wurden 1962 eingeführt von G.M. Adelson-Velskii und Y.M. Landis AVL-Bäume sind höhenbalanciert. Man kann zeigen: Theorem: Ein AVL-Baum mit n Kindern hat Höhe O(log n). 30

Implementierungen der Operationen Search Minimum Maximum Successor Predecessor genau wie bei den natürlichen binären Suchbäumen. 31

Implementierung der Operationen Insert und Delete in AVL-Bäumen Idee: zunächst wie bei den natürlichen binären Suchbäumen. Falls Baum nicht mehr balanciert ist, dann wissen wir, dass ein Knoten u auf dem Suchpfad existiert mit bal(u) {-2,+2} Wir rebalancieren den Baum nun an dieser Stelle, so dass er danach wieder balanciert ist. 32

Beispiel 1: bal(5)=2 5 7 Rotationen (1) bal(7)=1 8 Rotation nach links an 5 5 bal(5)=0 bal(7)=0 7 8 5 ist unbalanciert 5, 7, 8 sind balanciert 33

Beispiel 2: Rotationen (2) bal(5)=2 5 7 6 bal(7)=0 8 Rotation nach links an 5 5 7 6 8 falsch: die 6 muss mitwandern 5 ist unbalanciert 5, 7, 8 sind balanciert 34

bal(5)=2 5 7 6 Rotationen (3) bal(7)=0 8 Rotation nach links an 5 bal(5)=1 5 bal(7)=-1 7 8 6 so falsch: korrekt! die 6 Warum muss mitwandern eigentlich? 5 ist unbalanciert 5, 7, 8 sind balanciert Die Suchbaumeigenschaft bleibt bei einer Rotation erhalten. Nach einer Rotation entsteht wieder ein binärer Suchbaum Achtung: dies ist nicht so wenn Petra gleiche Mutzel Schlüssel DAP2 enthalten SS09 sind 35

Beispiel 3: bal(5)=2 5 8 7 Rotationen (4) bal(8)=-1 Rotation nach links an 5 5 bal(5)=0 bal(8)=0 8 7 5 ist unbalanciert falsch: Das war keine Rotation!!! 36

bal(5)=2 5 8 7 Rotationen (5) bal(8)=-1 Rotation nach links an 5 5 bal(5)=1 bal(8)=-2 7 8 5 ist unbalanciert Diese Rotation hat nichts genützt! 37

bal(5)=2 5 Rotationen (6) bal(5)=2 5 bal(7)=0 5 bal(8)=-1 8 bal(7)=1 8 7 7 7 bal(5)=0 bal(8)=0 8 Rotation nach rechts an 8 Rotation nach links an 5 Doppelrotation Rechts-Links notwendig! 38

Doppelrotationen u u a v d a d v u b a v c b c d c b 39

Definition AVL-Ersetzung: Operation (z.b Insert, Delete), die einen Unterbaum T eines Knotens z durch einen modifizierten AVL-Baum ersetzt, dessen Höhe um höchstens 1 von der Höhe von T abweicht. 40

Rebalancierung Wir betrachten einen AVL-Baum unmittelbar nach einer AVL-Ersetzung (Einfügung bzw. Entfernens eines Knotens). Sei u ein unbalancierter Knoten maximaler Tiefe, d.h. bal(u) {-2,+2}. Sei T der maximale Unterbaum mit Wurzel u in T. Wir unterscheiden vier verschiedene Situationen. 41

1. Fall: bal(u)=-2 Sei v das linke Kind von u (existiert!) Fall 1.1: bal(v) {-1,0}: Rotation nach rechts an u u bal(u)=-2 v bal(v) {0,1} v u C Rotation nach rechts B B C A Wir wissen: h(c)=h(a)-1 und h(b)=h(a) oder h(a)-1 Suchbaumeigenschaft bleibt erhalten; u und v sind balanciert Für die Knoten unterhalb hat sich nichts geändert. A

1. Fall: bal(u)=- 2 ff. Sei v das linke Kind von u (existiert!) Fall 1.2: bal(v)=+1: Links-Rechtsrotation an u bal(v)=1 u bal(u)=-2 w v v u A B w C D Linksrotation an v dann Rechtsrotation an u B C A D u, v und w sind balanciert h(d)=h(a) und ( h(b)=h(a) oder h(c)=h(a) )

2 + 1. Fall: bal(u)= -2 Sei v das linke Kind von u (existiert!) rechte Fall 1.1: bal(v) {-1,0}: Rotation {0,1} nach rechts an u 2 links u bal(u)=-2 bal(u)=2 v v u Rotation C nach rechts links C A B B A h(c)=h(a)-1 und h(b)=h(a) oder h(b)=h(a)-1 Inorder-Reihenfolge bleibt erhalten und u und v sind balanciert Für die Knoten unterhalb hat Petra sich Mutzel nichts geändert. 46

1. Fall: bal(u)= - 2 ff. Sei v das linke Kind von u (existiert!) Fall 21.2: bal(v)=+1: Links-Rechtsrotation -1 Rechts-Links an u bal(u)=-2 bal(u)=2 D C u 2 + w B bal(v)=-1 v rechte Rechts- Linksrotation an v dann Rechts- Linksrotation an u h(d)=h(a) und ( h(b)=h(a) oder h(c)=h(a) ) A D u C w B v A u, v und w sind balanciert

Rebalancierung ff. Seien T der maximale Unterbaum mit Wurzel u in T vor der Rebalancierung, T der gleiche Teilbaum nach einer einfachen Rotation und T nach einer Doppelrotation. Für die einfache Rotation gilt: h(t )-h(t) {-1,0} Im Falle der Doppelrotation gilt: h(t )-h(t) = -1 Alle Transformationen (Einfach- und Doppelrotationen) kann man also als eine AVL- Ersetzung auffassen. 48

Rebalancierung ff. Nach der AVL-Ersetzung gilt: Die Unterbäume mit Wurzel u und v sind danach balanciert. Für die Unterbäume unterhalb hat sich die Balancierung nicht geändert. Bestimme nun den nächsten unbalancierten Knoten maximaler Tiefe. Diese Tiefe ist nun kleiner als vorher. Wiederhole die Rebalancierung (AVL-Ersetzung) solange, bis alle Knoten balanciert sind. Das Verfahren konvergiert nach O(h(T)) Iterationen zu einem gültigen AVL-Baum.

Rebalancierung ff. Die Insert-Operation unterscheidet sich nur insofern von der Delete-Operation, dass hier ein einziger Rebalancierungsschritt genügt. Bei der Delete-Operation hingegen kann es sein, dass mehrere Rebalancierungsschritte notwendig sind. Implementierungen: vereinfacht: ohne parent 50

RotateRight(u) Function h(u):int If u=nil then return -1 else return u.height u Function RotateRight(u):TreeNode (1) v:=u.left //Bestimme v (2) u.left:=v.right b v a (3) v.right:=u v (4) u.height:=max(h(u.left),h(u.right))+1 (5) v.height:=max(h(v.left),h(u))+1 b u (6) return v //neue Wurzel a 51

RotateLeftRight(u) Function RotateLeftRight(u):TreeNode (1) u.left:=rotateleft(u.left) (2) return RotateRight(u) Beispiel: u u a v d a d v u b a v c b c d c b 52

INSERTAVL(p,q) (1) If p==nil then INSERT(p,q) (2) else (3) If q.key<p.key then { (4) INSERTAVL(p.left,q) (5) if h(p.right)-h(p.left)==-2 then { v b (6) if h(p.left.left)>h(p.left.right) then (7) p=rotateright(p) (8) else p=rotateleftright(p) (9) } } a u 54

INSERTAVL(p,q) ff (10) Else { (11) If q.key>p.key then (12) INSERTAVL(p.right,q) (13) if h(p.right)-h(p.left)==2 then (14) if h(p.right.right>h(p.right.left) then (15) p=rotateleft(p) (16) else p=rotaterightleft(p) (17) } } (18) p.height:=max(h(p.left),h(p.right))+1 u v a v u a b b 55

Analyse Rotationen und Doppelrotationen können in konstanter Zeit ausgeführt werden. Eine Rebalancierung wird höchstens einmal an jedem Knoten auf dem Pfad vom eingefügten oder gelöschten Knoten zur Wurzel durchgeführt. Insert und Delete-Operationen sind in einem AVL- Baum in Zeit O(log n) möglich. AVL-Bäume unterstützen die Operationen Suchen, Insert, Delete, Minimum, Maximum, Successor, Predecessor, in Zeit O(log n).

Diskussion Wenn oft gesucht und selten umgeordnet wird, sind AVL-Bäume günstiger als natürliche binäre Suchbäume. Falls jedoch fast jeder Zugriff ein Einfügen oder Entfernen ist (hinreichend zufällig), dann sind natürliche binäre Suchbäume vorzuziehen. 57

Java-Applets Es gibt zu AVL-Bäumen sehr schöne Java- Applets, die die Doppelrotationen sehr schön darstellen, z.b. die Studiumsseiten von Math e (Prism) a : http://www.matheprisma.uni-wuppertal.de/ Module/BinSuch/index.html ENDE 58

Zum Ausschneiden und Üben 1 2 3 4 5 6 7 8 9 10 11 12 59

60

61

D B A B D C