Motivation Binäre Suchbäume

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

Algorithmen und Datenstrukturen Suchbaum

13. Binäre Suchbäume

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

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)

Datenstrukturen und Algorithmen

Tutorium Algorithmen & Datenstrukturen

Binäre Bäume Darstellung und Traversierung

Algorithmen und Datenstrukturen

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

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

Kapiteltests zum Leitprogramm Binäre Suchbäume

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

Algorithmen und Datenstrukturen Balancierte Suchbäume

6 Baumstrukturen. Formale Grundlagen der Informatik I Herbstsemester Robert Marti

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

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

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:

Programmiertechnik II

Suchen und Sortieren

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

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

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

368 4 Algorithmen und Datenstrukturen

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

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

Sortierte Folgen 250

Algorithmen und Datenstrukturen SS09

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

Kapitel 5: Dynamisches Programmieren Gliederung

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

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

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

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

Sortierverfahren für Felder (Listen)

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

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

Kapitel 9 Suchalgorithmen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Vorkurs Informatik WiSe 15/16

Grundlagen der Programmierung 2. Bäume

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

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 )

binäre Suchbäume Informatik I 6. Kapitel binäre Suchbäume binäre Suchbäume Rainer Schrader 4. Juni 2008 O(n) im worst-case Wir haben bisher behandelt:

Gegeben Zieladresse, finde Nachbarknoten, an den Paket zu senden ist ("Routing-Tabelle")

Beispiel zu Datenstrukturen

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

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.

2 Java: Bäume. 2.1 Implementierung von Bäumen. 2.2 Implementierung eines binären Suchbaums. 2.3 Traversierung von Bäumen

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

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

Binärbäume. Prof. Dr. E. Ehses,

Einführung in die Informatik 1

Fakultät Wirtschaftswissenschaft

Zeichnen von Graphen. graph drawing

Suchen und Sortieren Sortieren. Heaps

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

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

WS 2009/10. Diskrete Strukturen

Nachtrag zu binären Suchbäumen

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

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

Programmierung und Modellierung

Einführung in (Binäre) Bäume

Kurs 1613 Einführung in die imperative Programmierung

Präfx Trie zur Stringverarbeitung. Cheng Ying Sabine Laubichler Vasker Pokhrel

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

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

Beispielblatt VU Algorithmen und Datenstrukturen 1 VU 6.0

Unterrichtsvorhaben Q2- I:

Algorithmen & Datenstrukturen 1. Klausur

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

Algorithmen und Datenstrukturen

Vortrag. Suchverfahren der Künstlichen Intelligenz. Sven Schmidt (Technische Informatik)

Algorithmen und Datenstrukturen

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

EndTermTest PROGALGO WS1516 A

Undirected Single-Source Shortest Paths with Positive Integer Weights in Linear Time

Bäume und Wälder. Bäume und Wälder 1 / 37

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

Datenstrukturen. Mariano Zelke. Sommersemester 2012

1 topologisches Sortieren

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK

Algorithmen und Datenstrukturen Bereichsbäume

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou

Fully dynamic algorithms for the single source shortest path problem.

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS)

15 Optimales Kodieren

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

4 Greedy-Algorithmen (gierige Algorithmen)

DATENSTRUKTUREN UND ZAHLENSYSTEME

Graphen: Datenstrukturen und Algorithmen

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Schulinterner Lehrplan für das Fach Informatik der Sekundarstufe II an der Bettine von Arnim Gesamtschule

Transkript:

Kap..: Binäre Suchbäume Professor Dr. Lehrstuhl für Algorithm Engineering, LS Fakultät für Informatik, TU Dortmund Zusätzliche Lernraumbetreuung Morteza Monemizadeh: Jeden Montag von :00 Uhr-:00 Uhr in OH, R., Hilfe bei Problemen der Vorlesung oder Übung (in englischer Sprache) Beachten Sie auch die bisherigen Lernraumangebote Mo-Fr (s. Web). VO DAP SS 009. Mai 009 Motivation Binäre Suchbäume Warum soll ich heute hier bleiben? Binäre Suchbäume begegnen Ihnen ständig! Datenstruktur zur Unterstützung der Operationen des ADT Dictionary: Warum soll mich das interessieren? Beliebte Klausuraufgaben! Operationen des ADT Dictionary INSERT(K k,v v) Falls k nicht schon in D ist, dann wird ein neuer Schlüssel k mit Wert v in D eingefügt, andernfalls wird der Wert des Schlüssels k auf v geändert. DELETE(K k) Entfernt Schlüssel k mit Wert aus D (falls k in D) SEARCH(K k): V Gibt den bei Schlüssel k gespeicherten Wert zurück (falls k in D) Zusätzliche Operationen der Binären Suchbäume MINIMUM (MAXIMUM) Sucht den Schlüssel mit kleinstem (größtem) Wert. PREDECESSOR (SUCCESSOR) Ausgehend von einem gegebenen Element suchen wir das Element mit dem nächstkleineren (nächstgrößeren) Schlüssel.

Überblick Bezeichnungen Traversierungen für binäre Bäume Implementierungen Analyse Definitionen Gewurzelter Baum (rekursiv): entweder leer oder (Wurzel) mit Verweisen auf mehrere gewurzelte Bäume (Teilbäume) Kind von v: Wurzelknoten eines nichtleeren Teilbaums von v Blatt: ohne Kinder Bezeichnungen: Gewurzelte Bäume innere linker Unterbaum von Wurzel Kanten Blätter: ohne Kinder Tiefe d(v): # der Elter- bis Wurzel (inkl.) ist Wurzel des linken Unterbaums von ist Elter von, ist Elter von ist linkes Kind von, ist rechtes Kind von innere linker Unterbaum von Bezeichnungen Wurzel d()= d()= d(wurzel)=0 Blätter: ohne Kinder Tiefe d(v): # der Elter- bis Wurzel (inkl.) Ebene: Menge aller mit gleicher Tiefe innere linker Unterbaum von Bezeichnungen Wurzel d()= d()= d(wurzel)=0 Nachfolger(v): Menge aller im Unterbaum mit Wurzel v Blätter: ohne Kinder Höhe h(t r ) eines (Teil-)baumes T r mit Wurzel r: max { d(v): v ist in T r } h(t )= h(t )=0 h(t Wurzel )= Weitere Definitionen Ein gewurzelter Baum heißt geordnet, wenn die Reihenfolge der Kinder festgelegt ist Ein binärer gewurzelter Baum ist ein gewurzelter Baum, bei dem jeder genau zwei Kinder hat. Ein geordneter gewurzelter binärer Baum unterscheidet also zwischen linkem und rechtem Kind bzw. linkem und rechtem Unterbaum. Ein binärer Baum heißt vollständig, wenn alle Blätter die gleiche Tiefe haben.

Def. Binärer Suchbaum Ein binärer Suchbaum ist ein binärer geordneter Baum, dessen einen Suchschlüssel als Datum enthalten, und der die Suchbaumeigenschaft erfüllt: Suchbaumeigenschaft: Enthält ein den Schlüssel x, so sind alle Schlüssel in seinem linken Unterbaum kleiner als x und alle Schlüssel im rechten Unterbaum größer als x. Achtung: alle Schlüssel verschieden Implementierung binärer Bäume Realisierung als verallgemeinerte Listen mit bis zu zwei Nachfolgern: x.key: Schlüssel von x x.info: zum Schlüssel zu speichernde Daten x.parent: Elter von x x.left: linkes Kind von x x.right: rechtes Kind von x Zugriff auf den Baum erfolgt über seinen Wurzelknoten root Traversierungen für binäre Bäume Inorder-Traversierung: Durchsuche rekursiv zunächst den linken Unterbaum, dann die Wurzel, durchsuche dann den rechten Unterbaum. Preorder-Traversierung: Besuche zuerst die Wurzel, durchsuche dann rekursiv den linken Unterbaum, dann den rechten. Postorder-Traversierung: Durchsuche rekursiv zunächst den linken Unterbaum, durchsuche dann rekursiv den rechten Unterbaum, besuche dann die Wurzel. Traversierungen für binäre Bäume Level-Order-Traversierung: Durchsuche zunächst alle Ebenen von links nach rechts, wobei die Ebenen von oben nach unten besucht werden. Die wichtigste Traversierungsordnung für binäre Suchbäume ist die Inorder- Traversierung, weil dabei die Schlüssel aufsteigend sortiert durchlaufen werden. Inorder-Traversierung Beispiel für INORDER-Aufruf () Procedure INORDER(p) () if p NULL { () INORDER(p.left) () Ausgabe von p () INORDER(p.right) () } INORDER() INORDER() Ausgabe von INORDER() Ausgabe von Ausgabe von INORDER() Ausgabe von Aufruf: INORDER(root) Inorder:,,, s. auch Skript 9

Pre Inorder-Traversierung () Procedure INORDER(p) PREORDER(p) () if p NULL { () INORDER(p.left) () PREORDER(p.left) Ausgabe von p () INORDER(p.right) PREORDER(p.right) () } Post Inorder-Traversierung () Procedure INORDER(p) POSTORDER(p) () if p NULL { () INORDER(p.left) POSTORDER(p.left) () Ausgabe POSTORDER(p.right) von von p p () INORDER(p.right) () } 0 Traversierungen für binäre Bäume Aus Inorder-Traversierung und Preorder- Traversierungsreihenfolge kann der binäre Baum eindeutig rekonstruiert werden, wenn er lauter verschiedene Schlüssel enthält. Dies gilt nicht, wenn lediglich Preorder- und Postorder-Reihenfolge gegeben sind. Beispiel: Hier geht es nicht um binäre SUCHBÄUME Preorder:,,, Postorder:,,, Implementierung Worst Case Analyse von von SEARCH(r,s) BinarySearch in binären Suchbäumen Finde die Position im Baum mit Wurzel r, an der s gespeichert ist (bzw. sein müßte): Idee: nutze Suchbaumeigenschaft:. Vergleiche s mit dem Schlüssel s an der Wurzel (des Teilbaums). Falls gefunden: STOP!. Sonst: Falls s < s : suche im linken Teilbaum. Sonst: suche im rechten Teilbaum. Gehe zu. Pseudocode s. Skript bzw. Folien. Ausgabe: nicht gefunden! s. Übung Implementierung Worst Case Analyse von von INSERT(r,q) BinarySearch in binären Suchbäumen Einfügen eines s q in den Baum mit Wurzel r. Suche nach q.key Suche endet mit der Position eines leeren Unterbaums. Einfügen von q an diese Position Pseudocode s. Skript bzw. Folien Worst Implementierung Case Analyse von DELETE(r,q) BinarySearch in binären Suchbäumen Entfernt q im Baum mit Wurzel r. Suche nach q.key Suche endet an v. Falls v NULL, dann. Falls v keine Kinder besitzt, dann: streiche v. Falls v genau ein Kind hat: ändere Zeiger ( herausschneiden ). Falls v zwei Kinder hat, dann hat y:=successor(v) kein linkes Kind (warum??): Herausschneiden bzw. Entfernen von y und Ersetzen von q durch y. Pseudocode s. Skript bzw. Folien

Fall : q hat genau ein Kind 0 0 Fall : q ist Blatt 0 0 Fall : q hat genau Kinder Fall : q hat genau Kinder 0 0 0 0 Successor(q): Successor(q): 9 ff Successor-Suche Fall : q hat genau Kinder 0 0 0 0 Successor() = Successor() = Successor() = 0

Implementierung von SUCCESSOR(r,p) Gibt den Nachfolger von p in der Inorder- Durchmusterungsreihenfolge aus. Falls p rechtes Kind hat: Return Minimum(p.right). Sonst: Falls p linkes Kind ist: Return(p.parent). Sonst: wandere solange nach oben bis der aktuelle zum ersten Mal linkes Kind ist; dann: Return(p.parent). oder die Wurzel erreicht ist; dann: existiert kein Nachfolger. Pseudocode s. Skript bzw. Folien Analyse der Operationen. 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 sein? Abhängigkeit der Höhe von der Einfügereihenfolge Einfügereihenfolge:,,,,,9 Baum ist zu linearer Liste degeneriert Problem: Suchzeit ist linear, da h(t)=n- Einfügereihenfolge:,,,,,9 9 9 Diskussion Ein binärer Suchbaum T kann im Extremfall zu einer linearen Liste ausarten (z.b. Einfügereihenfolge sortiert). Dann dauert die erfolglose Suche Θ(h(T))=Θ(n) Der andere Extremfall sind vollständig balancierte Bäume (d.h. alle Ebenen bis auf evtl. die unterste sind voll besetzt); diese haben die Höhe h(t)=θ(log n). Hier dauert die erfolglose Suche Θ(h(T))=Θ(log(n)) Wir werden sehen: für dieses gute Zeitverhalten genügen auch hinreichend balancierte Bäume Durchschnittliche Suchpfadlänge Man kann zeigen: Die erwartete Suchpfadlänge (über alle möglichen Permutationen von n Einfügeoperationen) ist I(n)= ln n - O() =.9 log n - O() D.h. für große n ist die durchschnittliche Suchpfadlänge nur ca. % länger als im Idealfall. Allerdings ist diese Annahme, dass die Daten in einer zufälligen Reihenfolge eingegeben werden in vielen Anwendungen nicht gerechtfertigt. Lösung: Balancierte Suchbäume, s. nächste VO