Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Ähnliche Dokumente
Algorithmen und Datenstrukturen Balancierte Suchbäume

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

Copyright, Page 1 of 8 AVL-Baum

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

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

Datenstrukturen & Algorithmen

Abschnitt 18: Effizientes Suchen in Mengen

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

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

Dynamische Mengen. Realisierungen durch Bäume

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

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

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

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

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

Informatik II, SS 2014

Übung zur Vorlesung Algorithmische Geometrie

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

Übung Algorithmen I

14. Rot-Schwarz-Bäume

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

Datenstrukturen & Algorithmen

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

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

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

Algorithmen und Datenstrukturen Suchbaum

Suchbäume mit inneren Knoten verschiedener Knotengrade.

Informatik II, SS 2014

Kap. 4.2: Binäre Suchbäume

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

Programmiertechnik II

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

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2013/14. Prof. Dr. Sándor Fekete

Datenstrukturen und Algorithmen

Vorlesung Datenstrukturen

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:

13. Binäre Suchbäume

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

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

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

Kapitel 5: Dynamisches Programmieren Gliederung

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

6-1 A. Schwill Grundlagen der Programmierung II SS 2005

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

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

Klausur Algorithmen und Datenstrukturen

Nachtrag zu binären Suchbäumen

Algorithmen und Datenstrukturen 1

Binäre Bäume Darstellung und Traversierung

Tutoraufgabe 1 (2 3 4 Bäume):

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

Suchen und Sortieren Sortieren. Heaps

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

Wörterbucher. Das Wörterbuch 1 / 71

Algorithmen und Datenstrukturen

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

15 Optimales Kodieren

368 4 Algorithmen und Datenstrukturen

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

Algorithmen und Datenstrukturen Kapitel 7 Dynamische Mengen, das Suchproblem &

Grundlagen der Programmierung

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

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

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Kapiteltests zum Leitprogramm Binäre Suchbäume

Nachtrag zu binären Suchbäumen (nicht (nur) AVL Bäumen: Löschen von Elementen in binären Suchbäumen. 1. Fall: zu löschendes Element ist Blatt: löschen

11.1 Grundlagen - Denitionen

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

DAP2-Klausur

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

B-Bäume, Hashtabellen, Cloning/Shadowing, Copy-on-Write

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Dynamisches Huffman-Verfahren

Grundlagen der Programmierung 2. Bäume

B-Bäume I. Algorithmen und Datenstrukturen 220 DATABASE SYSTEMS GROUP

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

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter

Tutoren Jan Ebbe Pat Mächler Valentino Rugolo Sascha Scherrer. Grundlagen der Programmierung (CS101) - Blatt 8 Theorie [4 Punkte] - Praxis [12 Punkte]

Datenstrukturen. Mariano Zelke. Sommersemester 2012

4 Greedy-Algorithmen (gierige Algorithmen)

Algorithmen II Vorlesung am

Geometrische Algorithmen

2. Musterlösung. Problem 1: Least Common Ancestor

Amortisierte Analysen

Sortierverfahren für Felder (Listen)

Suchen und Sortieren

Kapitel 9 Suchalgorithmen

Vorkurs Informatik WiSe 15/16

Kapitel 9 Suchalgorithmen

Binary Decision Diagrams (Einführung)

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

Programmierung und Modellierung

Was bisher geschah. 1. Zerlegung in monotone Polygone 2. Triangulierung der monotonen Teilpolygone

Bäume, Suchbäume und Hash-Tabellen

Programmiertechnik II

DATENSTRUKTUREN UND ZAHLENSYSTEME

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.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Dr. Thomas Neumann

Klausur Informatik B. Teil 1: Informatik 3 Juli 2005

Transkript:

Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 - Balancierte Bäume, AVL-Bäume) Prof. Dr. Susanne Albers

Balancierte Bäume Eine Klasse von binären Suchbäumen ist balanciert, wenn jede der drei Wörterbuchoperationen Suchen Einfügen Entfernen von Schlüsseln für einen Baum mit n Schlüsseln stets (im worst case) in O(log n) Schritten ausführbar ist. Mögliche Balancierungsbedingungen: Höhenbedingung Gewichtsbedingung Strukturbedingungen AVL-Bäume BB[α]-Bäume Bruder-, 2-3-, a-b-, B-Bäume Ziel: Höhe eines Baumes mit n Schlüsseln bleibt stets in O(log n). 2

AVL-Bäume Schöpfer: Adelson-Velskii und Landis (1962) Suchen, Einfügen und Entfernen eines Schlüssels in einem zufällig erzeugten natürlichen Suchbaum mit n Schlüsseln ist im Mittel in O(log 2 n) Schritten ausführbar. Der Worst Case liegt jedoch bei Ω(n). Idee von AVL-Bäumen: Modifizierte Prozeduren zum Einfügen und Löschen, die ein Degenerieren des Suchbaums verhindern. Ziel von AVL-Bäumen: Höhe sollte O(log 2 n) und das Suchen, Einfügen und Löschen sollte in logarithmischer Zeit möglich sein. 3

Definition von AVL-Bäumen Definition: Ein binärer Suchbaum heißt AVL-Baum oder höhenbalanciert, wenn für jeden Knoten v gilt, dass sich die Höhe des rechten Teilbaumes h(t r ) von v und die Höhe des linken Teilbaumes h(t l ) von v um maximal 1 unterscheiden. bal(v) = h(t r ) h(t l ) {-1,, +1} Balancegrad: 4

Beispiele AVL-Baum kein AVL-Baum AVL-Baum 5

Eigenschaften von AVL-Bäumen AVL-Bäume können nicht zu linearen Listen degenerieren. AVL-Bäume mit n Knoten haben eine Höhe von O(log n). Offenbar gilt: Ein AVL-Baum der Höhe hat 1 Blatt Ein AVL-Baum der Höhe 1 hat 2 Blätter ein AVL-Baum der Höhe 2 mit minimaler Blattzahl hat 3 Blätter... Wie viele Blätter hat ein AVL-Baum der Höhe h mit minimaler Blattzahl? 6

Minimale Blattanzahl von AVL-Bäumen mit Höhe h h + 1 h h + 2 Folgerung: Ein AVL-Baum der Höhe h hat mindestens F h+2 Blätter mit F = F 1 = 1 F i+2 = F i+1 + F i F i ist die i-te Fibonacci-Zahl. 7

Höhe eines AVL-Baumes Satz: Die Höhe h eines AVL-Baumes mit n Blättern (und n - 1 inneren Knoten) beträgt höchstens h c log 2 n, mit einer Konstanten c. Beweis: Für die Fibonacci-Zahlen gilt: F h = 1 5 1+ 2 5 h 1 2 5 h Wegen n F h+2 (1.618...) h folgt somit h log 2 1 *log 1.618... 2 n 1.44..log 2 n. 8

Minimaler AVL-Baum der Höhe 9 9

Einfügen in einen AVL-Baum Bei jeder Modifikation des Baums müssen wir garantieren, dass die AVL-Baum-Eigenschaft erhalten bleibt. Ausgangssituation: Nach Einfügen von 5: 7 7 4 4 5 Problem: Wie können wir den neuen Baum so modifizieren, dass ein AVL-Baum daraus entsteht? 1

Beispiel eines AVL-Baumes 11

Speichern des Balancegrads in den Knoten Um die AVL-Baum-Eigenschaft wiederherzustellen, genügt es, in jedem Knoten den Balancegrad mitzuführen. Laut Definition gilt bal(p) = h(p.right) h(p.left) {-1,, +1} Beispiel: -1-1 +1 +1 12

Die verschiedenen Situationen beim Einfügen in den AVL-Baum 1. Der Baum ist leer: Schaffe einen einzigen Knoten mit zwei Blättern, speichere dort x und fertig! x 2. Der Baum ist nicht leer und die Suche endet bei einem Blatt. Sei Knoten p Vater des Blattes, bei dem Suche endet. Wegen bal(p) {-1,,1} muss gelten, dass entweder der linke Nachfolger von p ein Blatt ist, aber nicht der rechte (Fall 1) oder der rechte Nachfolger von p ein Blatt ist aber nicht der linke (Fall 2) oder beide Nachfolger von p sind Blätter (Fall 3). 13

Gesamthöhe unverändert (1) Fall 1: [bal(p) = + 1] und x < p.key, da Suche bei Blatt mit Vater p endet. p +1 p x fertig! 14

Gesamthöhe unverändert (2) Fall 2: [bal(p) = - 1] und x > p.key, da Suche bei Blatt mit Vater p endet. p -1 p x fertig! Beide Fälle sind unkritisch. Die Höhe des Teilbaums, in dem p sich befindet, ändert sich nicht. 15

Der kritische Fall Fall 3: [bal(p) = ] Dann sind beide Söhne von p Blätter. Die Höhe wächst! Wir unterscheiden, ob wir den neuen Schlüssel x als rechten oder linken Nachfolger von p einfügen müssen: [bal(p) = und x > p.key] [bal(p) = und x < p.key] p k p k 1 p k p k -1 x x In beiden Fällen benötigen wir eine Prozedur upin(p), die den Suchpfad zurückläuft, die Balancegrade prüft und Umstrukturierungen (so genannte Rotationen oder Doppelrotationen) durchführt. 16

Die Prozedur upin(p) Wenn upin(p) aufgerufen wird, ist stets bal(p) {-1, +1} und die Höhe des Teilbaums mit Wurzel p ist um 1 gewachsen. upin(p) startet bei p und geht schrittweise nach oben (ggf. bis zur Wurzel). In jedem Schritt wird dabei versucht, die AVL-Baum-Eigenschaft wiederherzustellen. Wir konzentrieren uns im folgenden auf die Situation, dass p linker Nachfolger seines Vorgängers φp ist. Die Situation, dass p rechter Nachfolger seines Vorgängers φp ist, kann analog behandelt werden. 17

Fall1: bal(φp) = 1 1. Der Vorgänger φp hat den Balancegrad +1. Da sich die Höhe des Teilbaums mit Wurzel p als linker Nachfolger von φp um 1 erhöht hat, genügt es, den Balancegrad von φp auf zu setzen: φp +1 φp p p fertig! 18

Fall 2: bal(φp) = 2. Der Vorgänger φp hat den Balancegrad. Da sich die Höhe des Teilbaums mit Wurzel p als linker Nachfolger von φp sich um 1 erhöht hat, ändert sich der Balancegrad von φp auf -1. Da sich gleichzeitig die Höhe des Teibaums mit Wurzel φp verändert hat, müssen wir upin rekursiv mit φp als Argument aufrufen. φp φp -1 upin(φp) p p 19

Der kritische Fall 3: bal(φp) = -1 φp -1 p Wenn bal(φp) = -1 und die Höhe des linken Teilbaums p von φp um 1 gewachsen ist, muss die AVL-Baum-Eigenschaft in φp verletzt sein. In diesem Fall müssen wir den Baum umstrukturieren. Erneut unterscheiden wir zwei Fälle, nämlich bal(p) = -1 (Fall 3.1) und bal(p) = +1 (Fall 3.2). Die Invariante beim Aufruf von upin(p) bedeutet, dass bal(p). Der Fall bal(p) = kann also nicht vorliegen! 2

Fall 3.1: bal(φp) = -1 und bal(p) = -1 φp y -1 φp x x -1 Rotation nach rechts y fertig! 3 h - 1 2 1 2 3 1 h - 1 h h - 1 h - 1 h 21

Ist der resultierende Baum noch ein Suchbaum? Es muss garantiert sein, dass der resultierende Baum die 1. Suchbaumeigenschaft und die 2. AVL-Baum-Eigenschaft erfüllt. Suchbaumeigenschaft: Da der ursprüngliche Baum die Suchbaumeigenschaft erfüllt, muss gelten: Alle Schlüssel in Baum 1 sind kleiner als x. Alle Schlüssel in Baum 2 sind größer als x und kleiner als y. Alle Schlüssel in Baum 3 sind größer als y (und x). Daher erfüllt auch der resultierende Baum die Suchbaumeigenschaft. 22

Ist der resultierende Baum balanciert? AVL-Baum-Eigenschaft: Da der ursprüngliche Baum ein AVL-Baum war, muss gelten: Wegen bal(φp) = -1 haben Baum 2 und Baum 3 die gleiche Höhe h -1. Wegen bal(p) = -1 nach dem Einfügen, hat Baum 1 die Höhe h, während Baum 2 die Höhe h - 1 hat. Damit gilt nach der Rotation: Der Knoten, der y enthält, hat Balancegrad. Der Knoten φp hat Balancegrad. Somit ist der AVL-Baum-Eigenschaft wieder hergestellt. 23

Fall 3.2: bal(φp) = -1 und bal(p) = +1 24

Fall 3.2: bal(φp) = -1 und bal(p) = +1 φp z -1 φp y p x +1 h y 4 h - 1 Doppelrotation links-rechts h x h z fertig! 1 2 3 4 h - 1 h 1 h - 2 h - 1 1 2 3 h - 2 h - 1 h-1 h 1 h 2 h - 2 h - 1 25

Eigenschaften der Teilbäume 1. Der neue Schlüssel muss in den rechten Teilbaum von p eingefügt worden sein. 2. Die Bäume 2 und 3 müssen unterschiedliche Höhe haben, weil sonst die Methode upin nicht aufgerufen worden wäre. 3. Die einzig mögliche Kombination der Höhen in den Bäumen 2 und 3 ist somit (h -1,h - 2) und (h -2,h - 1), sofern sie nicht leer sind. 4. Wegen bal(p) = 1 muss Baum 1 die Höhe h - 1 haben 5. Schließlich muss auch Baum 4 die Höhe h - 1 haben (wegen bal(φp) = -1. Somit erfüllt der resultierende Baum ebenfalls die AVL-Baum-Eigenschaft. 26

Suchbaumeigenschaft Es gilt: 1. Die Schlüssel in Baum 1 sind sämtlich kleiner als x. 2. Die Schlüssel in Baum 2 sind sämtlich kleiner als y aber größer als x. 3. Die Schlüssel in Baum 3 sind alle größer als y und x aber kleiner als z. 4. Die Schlüssel in Baum 4 sind alle größer als x, y und z. Daher hat auch der durch die Doppelrotation entstandene Baum die Suchbaumeigenschaft. 27

Hinweise Wir haben lediglich den Fall betrachtet, dass p linker Nachfolger seines Vorgängers φp ist. Der Fall, dass p rechter Nachfolger seines Vorgängers φp ist, kann analog behandelt werden. Um die Methode upin(p) effizient zu implementieren, müssen wir bei der Suche nach der Einfügestelle des neuen Schlüssels eine Liste aller besuchten Knoten anlegen. Dann können wir diese Liste bei den rekursiven Aufrufen nutzen, um jeweils zum Vorgänger überzugehen und ggf. die erforderlichen Rotationen oder Doppelrotationen auszuführen. 28

Das Einfügen in einen nicht leeren AVL-Baum Suche nach x endet bei einem Blatt mit Vorgänger p 1. Rechter Sohn von p kein Blatt, x < p.key Anhängen links von p, fertig. 2. Linker Sohn von p kein Blatt, x > p.key Anhängen rechts von p, fertig. 3. Beide Söhne von p sind Blätter: Füge x als Sohn von p ein, upin(p) Die Methode upin(p): 1. p ist linker Nachfolger von φp (a) bal(φp) = 1 bal(φp) =, fertig. (b) bal(φp) = bal(φp) = -1, upin(φp) (c) i. bal(φp) = -1 und bal(p) = -1 Rotation nach rechts, fertig. ii. bal(φp) = - und bal(p) = +1 Doppelrotation links-rechts, fertig. 2. p ist rechter Nachfolger von φp.... 29

Ein Beispiel (1) Ausgangssituation: -1 1 3 1 15 7 3

Ein Beispiel (2) Einfügen von Schlüssel 9: 1-1 *p 3 1 15 7 1 9 AVL-Baum-Eigenschaft ist verletzt! 31

Ein Beispiel (3) Linksrotation bei *p liefert: -1 1 7 15 3 9 32

Ein Beispiel (4) Einfügen von 8 mit anschließender Doppelrotation liefert: φp 1-1 9 p 7 1 15 links-rechts 7 1 1 3 9-1 3 8 15 8 33