13. Binäre Suchbäume



Ähnliche Dokumente
Algorithmen und Datenstrukturen Suchbaum

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Datenstrukturen & Algorithmen

Tutorium Algorithmen & Datenstrukturen

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

Datenstrukturen und Algorithmen

14. Rot-Schwarz-Bäume

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Kap. 4.2: Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume

Algorithmen und Datenstrukturen Balancierte Suchbäume

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

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.

Binäre Bäume Darstellung und Traversierung

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

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

Informatik II, SS 2014

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

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

Doppelt verkettete Listen (1)

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

Grundlagen der Programmierung 2. Bäume

Algorithmen und Datenstrukturen Kapitel 7 Dynamische Mengen, das Suchproblem &

Programmiertechnik II

Sortierte Folgen 250

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

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

Suchen und Sortieren

9. Natürliche Suchbäume

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

368 4 Algorithmen und Datenstrukturen

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

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

Nachtrag zu binären Suchbäumen

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

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

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:

11. Elementare Datenstrukturen

Kapitel 5: Dynamisches Programmieren Gliederung

WS 2009/10. Diskrete Strukturen

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

Suchen und Sortieren Sortieren. Heaps

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Motivation Binäre Suchbäume

Kurs 1613 Einführung in die imperative Programmierung

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 )

Anmerkungen zur Übergangsprüfung

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Algorithmen und Datenstrukturen Kapitel 7 Dynamische Mengen, das Suchproblem &

11.1 Grundlagen - Denitionen

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

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

Programmierkurs Java

Vorkurs Informatik WiSe 15/16

2.11 Kontextfreie Grammatiken und Parsebäume

Beispiel zu Datenstrukturen

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

Theoretische Grundlagen der Informatik

Kapitel 8: Physischer Datenbankentwurf

Überblick. Lineares Suchen

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

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK

Das Briefträgerproblem

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

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

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

Sortierverfahren für Felder (Listen)

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

8 Diskrete Optimierung

Programmiertechnik II

Wiederholung. Datenstrukturen und. Bäume. Wiederholung. Suchen in linearen Feldern VO

1 topologisches Sortieren

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

Mergeable Heaps. C. Komusiewicz 7.1 Fibonacci-Heaps: Überblick 117

Anwendungsbeispiel MinHeap

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Algorithmentheorie Maximale Flüsse

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

1. Allgemeines. Mit der Vertragsverwaltung können u.a.

Zeichnen von Graphen. graph drawing

Algorithmen und Datenstrukturen

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

15 Optimales Kodieren

Transkript:

1. Binäre Suchbäume Binäre Suchbäume realiesieren Wörterbücher. Sie unterstützen die Operationen 1. Einfügen (Insert) 2. Entfernen (Delete). Suchen (Search) 4. Maximum/Minimum-Suche 5. Vorgänger (Predecessor), Nachfolger (Successor) Laufzeit für alle Operationen proportional zur Höhe des Baums. Später spezielle Suchbäume bei denen Höhe logarithmisch in Anzahl der Knoten ist. 1

Suchbaum-Eigenschaft (1) Binäre Suchbäume sind binäre Bäume. Bestehen aus Objekten mit Feldern für Verweis 1. p auf Eltern 2. right auf rechtes Kind. left auf linkes Kind Zusätzlich Feld key für Schlüssel, dabei sind Schlüssel natürliche Zahlen. 2

Suchbaum-Eigenschaft (2) Es gilt Suchbaum-Eigenschaft: Für jedes Objekt x und jedes Objekt y im linken Teilbaum von x gilt key[y] key[x]. Für jedes Objekt x und jedes Objekt y im rechten Teilbaum von x gilt key[y] key[x].

Binäre Bäume - Illustration root[t] / / / / / / / / / / / / / 4

Illustration von Suchbäumen 5 7 2 5 8 2 7 5 8 5 5

Durchlaufen von Suchbäumen (1) Suchbaum-Eigenschaft erlaubt es, Schlüssel im Baum in sortierter Reihenfolge auszugeben. Dazu wird der Baum in Inorder durchlaufen. D.h. die Wurzel eines Teilbaums wird zwischen den Knoten des linken und des rechten Teilbaums ausgegeben. Alternativen Methoden, die Knoten eines Suchbaums zu durchlaufen, sind: 1. Postorder 2. Preorder 6

Durchlaufen von Suchbäumen (2) ( x) Inorder - Tree - Walk 1 if x NIL 2 then Inorder - Tree - print( x) 4 Inorder - Tree - Walk Walk ( left[ x] ) ( right[ x] ) Satz 1.1: Ist x Wurzel eines Baums mit n Knoten, so benötigt Algorithmus Inorder-Tree-Walk bei Aufruf mit Knoten x Zeit Θ(n). 7

Suchen in Suchbäumen Ziel: Finde in einem Suchbaum Knoten x mit Schlüssel k. Falls kein Knoten mit Schlüssel im Suchbaum enthalten, Ausgabe NIL. ( x,k ) Tree - Search 1 if x = NIL k = key[ x] 2 return x if k < key[ x] 4 then Tree - Search 5 else Tree - Search( ) ( left[ x],k ) right[ x],k Aufruf bei Suche in Baum T mit Tree-Search(root[T],k). Lemma 1.2: Tree-Search hat Laufzeit Θ(h), wobei h die Höhe des Baums T ist. 8

Suchen in Suchbäumen (2) 15 6 18 7 17 20 2 4 1 9 Suche nach Schlüssel 9: 9

Iteratives Suchen in Suchbäumen Iterative - Tree - 1 while x NIL k 2 do if k < key then x 4 else x 5 return x Search ( x,k ) key[ x] [ x] left[ x] right[ x] 10

Finden von Minimum/Maximum Ziel: Finde in einem Suchbaum Knoten x mit minimalem bzw. maximalem Schlüssel. ( x) Tree - Minimum 1 while left[ x] NIL 2 do x left return x [ x] ( x) [ x] Tree - Maximum 1 while right 2 do x return x NIL right [ x] Aufruf bei Baum T mit Tree-Minimum(root[T]) bzw. Tree-Maximum(root[T]). Lemma 1.: Tree-Minimum und Tree-Maximum haben Laufzeit Θ(h), wobei h die Höhe des Baums T ist. 11

Finden des direkten Nachfolgers(1) Ziel: Gegeben Suchbaum T und Knoten x mit Schlüssel k, finde Objekt mit nächst größerem Schlüssel (unter Annahme, dass alle Schlüssel unterschiedlich). Lemma 1.4: Besitzt x ein rechtes Kind, so ist der direkte Nachfolger von x der Knoten mit minimalem Schlüssel im rechtem Teilbaum von x. Besitzt x kein rechtes Kind, so ist der direkte Nachfolger von x der niedrigste Vorfahr von x, dessen linkes Kind ebenfalls ein Vorfahr von x ist (dabei ist ein Knoten Vorfahr von sich selbst). 12

Finden des direkten Nachfolgers (2) 15 6 18 7 17 20 2 4 1 9 Nachfolger von Schlüssel 1: 1

Finden des direkten Nachfolgers() Tree - 1 if 2 y 4 5 6 7 ( x) Successor right[ x] NIL then return Tree - Minimum p[ x] while y NIL x = right[ y] do x y y p[ y] return y ( right[ x] ) Lemma 1.5: Tree-Search hat Laufzeit Θ(h), wobei h die Höhe des Baums T ist. 14

Einfügen eines Elements (1) Idee: Finde Knoten mit höchstens einem Kind, für den einzufügender Knoten Wurzel des fehlenden Teilbaums werden kann. 6 11 2 4 9 1 8 10 Einfügen von Schlüssel 8 : 15

Einfügen eines Elements (2) ( T,z) Tree - Insert 1 y NIL 2 x root[ T ] while x NIL 4 do y x 5 if key 6 then 7 else 8 p[ z] y 9 if y = NIL 10 then root 11 else if key 12 then 1 else [ z] < key[ x] x left[ x] x right[ x] [ T ] z [ z ] < key [ y ] left[ y] z right [ y ] z > Baum T war leer 16

Einfügen eines Elements () Lemma 1.6: Tree-Insert hat Laufzeit Θ(h), wobei h die Höhe des Baums T ist. 17

Entfernen von Elementen (1) Betrachten beim Entfernen von Knoten drei Fälle: 1. Zu entfernender Knoten ist Blatt. 2. Zu entfernender Knoten besitzt nur ein Kind.. Zu entfernender Knoten besitzt zwei Kinder. Behandlung der drei Fälle: 1. Blatt kann einfach entfernt werden. 2. Knoten wird durch sein einziges Kind ersetzt.. Nutzen aus, dass direkter Nachfolger kein linkes Kind besitzt. Ersetzen Knoten durch direkten Nachfolger und entfernen Nachfolger wie in 2. aus seiner ursprünglichen Position. 18

Entfernen eines Blattes 6 6 2 11 2 11 4 9 1 4 9 1 5 z 19

Entfernen eines Elements mit 1 Kind 6 6 z 2 4 11 9 1 4 5 11 9 1 5 20

Entfernen eines Elements mit 2 Kindern z 6 z 6 y 9 2 11 2 11 4 y 9 1 4 10 1 5 10 5 9 2 11 4 10 1 5 21

Entfernen von Elementen (2) ( T,z) [ z] = NIL right[ z] Tree - Delete 1 if left = NIL 2 then y z else y Tree - Successor( z) 4 if left[ y] NIL 5 then x left[ y] 6 else x right[ y] 7 if x NIL 8 then p[ x] p[ y] 9 if p[ y] = NIL 10 then root[ T ] x 11 else if y = left[ p[ y ] 12 then y ] x 1 else right[ p[ y ] x 14 if y z 15 then key[ z] key[ y] 16 Satellitendaten von y werden nach z kopiert 22

Laufzeit von Einfügen und Entfernen Lemma 1.7: Tree-Delete hat Laufzeit Θ(h), wobei h die Höhe des Baums T ist. 2