2. Die rekursive Datenstruktur Baum 2.2 Suchen und Einfügen

Slides:



Advertisements
Ähnliche Präsentationen
8. Termin Teil B: Wiederholung Begriffe Baum
Advertisements

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
7.2 B-Bäume / B*-Bäume als Hilfsmittel zur Indexorganisation
Claudio Moraga; Gisbert Dittrich
7. Natürliche Binärbäume
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Minimum Spanning Tree: MST
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
2. Die rekursive Datenstruktur Baum 2
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Jamshid Azizi: Folie Isomorphietest Jamshid Azizi
Graphen und Bäume.
Algorithmen und Datenstrukturen Übungsmodul 8
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
A Workshop About this chapter General description Units Time Schedule
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Binärbäume.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Eine Vokabelschlange. Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt.
Objektorientiertes Modellieren und Programmieren mit Java
Anforderungen an die neue Datenstruktur
Schlange und Stapel.
Klausur „Diskrete Mathematik II“
Eine Näherungslösung für das Problem des Handlungsreisenden
Musterlösung zur Klausur "Diskrete Mathematik" vom
Das Problem des Handlungsreisenden
Der Abschluss einer Schlange
Informatik 10 – 3. Bedingte Anweisungen
Allgemeine Befehle für die allgemeine Liste
Graphen.
6. Wiederholungen und Zählschleifen
Raphael Fischer Informatik II - Übung 07 Raphael Fischer
Informatik 10 – 3. Bedingte Anweisungen
7. Arrays Gelegentlich braucht man für ein Programm mehrere Attribute desselben Datentyps oder derselben Klasse. Beispiel: In der Highscore-Liste eines.
Objektorientiertes Modellieren und Programmieren mit Java
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
REKURSION + ITERATION.
2. Die rekursive Datenstruktur Baum 2.1 Von der Liste zum Baum
2. Vererbung und Kapselung
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
Datenstrukturen und Softwareentwicklung
9. Vererbung und Polymorphie
Algorithmen und Datenstrukturen
Pflichtteil 2016 Aufgabe 6: Gegeben ist die Gerade
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
2.4 Durchlaufen von Bäumen
1. Die rekursive Datenstruktur Liste 1
DB2 – SS 2019 von Baum allgemein bis B*-Baum
2. Die rekursive Datenstruktur Baum 2.3 Baum und Kompositum
DB2 – SS 2019 von Baum allgemein bis B*-Baum
 Präsentation transkript:

2. Die rekursive Datenstruktur Baum 2.2 Suchen und Einfügen Für den abgebildeten geordneten Binärbaum gilt, dass alle Elemente des rechten Teilbaumes eines Knotens größer als der Inhalt dieses Knotens sind. Aus dieser Eigenschaft ergibt sich ein einfacher rekursiver Algorithmus für die Suche nach einem Element (z.B. 16): Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

rechter Nachfolger vorhanden wahr Zu suchendes Element: 16 Aktiver Knoten: 10 10 = 16 falsch 10 > 16 falsch rechter Nachfolger vorhanden wahr führe die Methode beim rechten Nachfolger aus Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

linker Nachfolger vorhanden wahr Zu suchendes Element: 16 Aktiver Knoten: 18 18 = 16 falsch 18 > 16 wahr linker Nachfolger vorhanden wahr führe die Methode beim linken Nachfolger aus Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

rechter Nachfolger vorhanden wahr Zu suchendes Element: 16 Aktiver Knoten: 15 15 = 16 falsch 15 > 16 falsch rechter Nachfolger vorhanden wahr führe die Methode beim rechten Nachfolger aus Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

gib wahr oder das Element zurück Suche beendet Zu suchendes Element: 16 Aktiver Knoten: 16 16 = 16 wahr gib wahr oder das Element zurück Suche beendet Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

rechter Nachfolger vorhanden falsch gib falsch oder null zurück Falls das zu suchende Element nicht im Baum vorhanden ist, führt der Algorithmus zu einem Blatt des Baumes: Zu suchendes Element: 2 ... Aktiver Knoten: 1 1 = 1 falsch 1 > 2 falsch rechter Nachfolger vorhanden falsch gib falsch oder null zurück Suche beendet Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Struktogramm: daten.schluesselIstGroesserAls(suchwert) Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Einzufügendes Element: 12 Aktiver Knoten: 10 10=12 falsch Der Algorithmus zum Einfügen eines Elements funktioniert nach einem ähnlichen Prinzip wie das Suchen. Falls das Element im Baum schon vorhanden ist, soll es nicht eingefügt werden. Deshalb wird beim aktiven Knoten jeweils geprüft, ob dessen Inhalt mit dem einzufügenden Element übereinstimmt. Alternativ könnte man auch zunächst den Suchalgorithmus ausführen. Einzufügendes Element: 12 Aktiver Knoten: 10 10=12 falsch 10>12 falsch rechter Nachfolger vorhanden wahr führe die Methode beim rechten Nachfolger aus Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Einzufügendes Element: 12 Aktiver Knoten: 18 18=12 falsch 18>12 wahr linker Nachfolger vorhanden wahr führe die Methode beim linken Nachfolger aus Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Einzufügendes Element: 12 Aktiver Knoten: 15 15=12 falsch 15>12 wahr linker Nachfolger vorhanden falsch setze 12 als linken Nachfolger Einfügen beendet Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2 Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 1 – Suchen und Einfügen Führe die Algorithmen zum Suchen und Einfügen mit einem Baum-Visualisierungs-Tool durch https://www.cs.usfca.edu/~galles/visualization/BST.html oder: http://www.bvt.ct-labs.de/ Füge in einen leeren Baum die Elemente jeweils in unterschiedlicher Reihenfolge ein. Vergleiche die Ergebnisse und beschreibe die Besonderheiten, Gemeinsamkeiten, deren Ursachen und mögliche Auswirkungen. Überlege für jede Teilaufgabe weitere Sequenzen, die auf unterschiedliche Weise den gleichen Baum erzeugen. 10, 18, 3, 15, 16, 19, 1, 17 10, 16, 1, 18, 19, 15, 17, 3 1, 3, 10, 15, 16, 17, 18, 19 10, 3, 18, 15, 19, 16, 17, 1 Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 2 – Implementieren eines Baumes Mach dich zunächst mit der Implementierung eines Wörterbuchs als Liste mit Kompositum vertraut. Der Konstruktor der Klasse Woerterbuch erzeugt eine Liste mit 15 Einträgen. Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 2 – Implementieren eines Baumes Das Wörterbuch soll nun als geordneter Binärbaum (zunächst ohne Kompositum) modelliert und implementiert werden. Klassendiagramm: nächste Folie Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Informatik 11 - 1. Die rekursive Datenstruktur Baum – 2 Informatik 11 - 1. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 2 – Implementieren eines Baumes Das Wörterbuch soll nun als geordneter Binärbaum (zunächst ohne Kompositum) modelliert und implementiert werden. Verwende als Vorlage das BlueJ Projekt binbaum_woerterbuch_vorlage und implementiere in den Klassen Binbaum und Knoten die benötigten Methoden. Die Methoden suchen und istVorhanden in der Klasse Knoten unterscheiden sich im Wesentlichen nur durch den Rückgabewert. Die Methoden istKleinerAls und schluesselIstKleinerAls unterscheiden sich Im Wesentlichen nur durch den Typ des Übergabeparameters. Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 3* – Entfernen eines Knotens Das Entfernen eines Knotens ist ein etwas anspruchsvollerer Algorithmus und kein Pflichtinhalt. Man unterscheidet drei Fälle: Fall 1: Der zu entfernende Knoten ist ein Blatt (z.B. “care“) Der Knoten kann direkt entfernt werden. Neuer linker Nachfolger von “cat“ ist null. Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 3* – Entfernen eines Knotens Fall 2: Der zu entfernende Knoten hat nur einen Nachfolger (z.B. “car“) Der unter “car“ liegende Teilbaum kann nach oben geschoben werden. Neuer linker Nachfolger von “clip“ ist “cat“. Beim Implementieren lässt sich dies am einfachsten dadurch erreichen, dass die Methode entfernen einen Rückgabewert erhält. Der Rückgabewert des Aufrufs entfernen(“car“) ist “cat“ und diese Referenz wird als neuer linker Nachfolger von “clip“ gesetzt. Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 3* – Entfernen eines Knotens Fall 3: Der zu entfernende Knoten hat zwei Nachfolger (z.B. “crab“) In diesem Fall kann man den zu entfernenden Knoten durch den kleinsten Knoten des rechten Teilbaums ersetzen, in diesem Beispiel “crow“. Dadurch bleibt die Ordnung des gesamten Baumes erhalten. Alternativ kann man den zu entfernenden Knoten natürlich auch durch das Maximum des linken Teilbaums, in diesem Beispiel “cook“, ersetzen. Minimum des rechten Teilbaums von “crab“ Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 3* – Entfernen eines Knotens Erzeuge mit dem Baum-Visualisierungs-Tool den Beispielbaum und teste die Methode zum Entfernen für die drei verschiedenen Fälle. Implementiere die benötigten Methoden. Als Vorlage kannst du das BlueJ Projekt binbaum_woerterbuch_entfernen_vorlage verwenden. Im Quelltext findest du ausführliche Kommentare als Hilfestellung. Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 4 – Tiefe (Höhe) des Baumes, Tiefe eines Knotens Die Tiefe eines Knotens ist die Anzahl der Kanten, die beim Durchlauf von der Wurzel bis zum Knoten beschritten werden. Die Wurzel hat die Tiefe 0. Im Beispielbaum ist die Tiefe von “cave“ gleich 2. Die Höhe oder die Tiefe des Baumes ist die maximale Tiefe, also im Beispiel gleich 3. Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 4 – Tiefe (Höhe) des Baumes, Tiefe eines Knotens Ergänze den Baum um folgende Methoden: Klasse Binbaum public int tiefeGeben()  Gibt die Tiefe des Baums als Rückgabewert aus. Rufe dazu die Methode wurzel.tiefeGeben(0) auf. Klasse Binbaum  public int tiefeGeben(String suchSchluessel)  Gibt die Tiefe des Knotens aus. Falls kein Knoten mit suchSchluessel als Inhalt existiert, soll der Wert -1 ausgegeben werden.  Rufe dazu die Methode wurzel.tiefeGeben(suchSchluessel, 0) auf.   Klasse Knoten  public int tiefeGeben(int aktTiefe)  Berechnet rekursiv die Tiefe des Knotens. Der Übergabeparameter wird benötigt, um ein globales Attribut von Knoten zu vermeiden, welches die aktuelle Tiefe speichert. Die Wurzel hat die Tiefe 0. Erstelle zwei lokale Attribute maxTiefeLinkerTeilbaum und maxTiefeRechterTeilbaum, deren Werte rekursiv bestimmt werden können, indem vom linken bzw. vom rechten Nachfolger die Methode tiefeGeben(aktTiefe+1) aufgerufen wird. Klasse Knoten  public int tiefeGeben(String suchSchluessel,int aktTiefe)  berechnet rekursiv die Tiefe des Knotens mit suchSchluessel als Inhalt.  Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 5* – Binomialkoeffizienten und Pascalsches Dreieck Mathematischer Hintergrund 1: Die Binomialkoeffizienten geben an, wie viele Möglichkeiten es gibt, aus einer Menge mit 𝑛 Elementen 𝑘 Elemente ohne Berücksichtigung der Reihenfolge und ohne Zurücklegen (man sagt auch „Ziehen mit einem Griff“) auszuwählen. Beispiel: Aus der Menge 𝑎,𝑏,𝑐,𝑑,𝑒 sollen nach obiger Auswahlregel drei Elemente gezogen werden. (𝑛=5 und 𝑘=3) Das direkte Aufzählen ergibt 𝑎,𝑏,𝑐 , 𝑎,𝑏,𝑑 , 𝑎,𝑏,𝑒 , 𝑎,𝑐,𝑑 , 𝑎,𝑐,𝑒 , 𝑎,𝑑,𝑒 , 𝑏,𝑐,𝑑 , 𝑏,𝑐,𝑒 , 𝑏,𝑑,𝑒 , 𝑐,𝑑,𝑒 , also 10 Möglichkeiten. Im Mathematikunterricht (Q12) lernt man, dass die Formel 𝑛! 𝑘!⋅ 𝑛−𝑘 ! mit 𝑛≥𝑘 diese Anzahl allgemein berechnet. Man schreibt dafür auch 𝑛 𝑘 und spricht „n über k“ oder auch „k aus n“. 𝑛 𝑘 heißt auch Binomialkoeffizient. Im Beispiel ist: 5 3 = 5! 3!⋅ 5−3 ! = 5! 3!⋅2! = 5⋅4⋅𝟑⋅𝟐⋅𝟏 𝟑⋅𝟐⋅𝟏⋅2⋅1 = 5⋅4 2⋅1 =10 Sonderfälle: 𝑛 1 = 𝑛! 1!⋅ 𝑛−1 ! = 𝑛! 𝑛−1 ! =𝑛 𝑛 𝑛 = 𝑛! 𝑛!⋅ 𝑛−𝑛 ! = 𝑛! 𝑛!⋅0! =1 (Deshalb definiert man 0! =1) 𝑛 0 = 𝑛! 0!⋅ 𝑛−0 ! = 𝑛! 0!⋅𝑛! =1   Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

𝑏𝑖𝑛 𝑛,𝑘 = 1 , 𝑤𝑒𝑛𝑛 𝑘=0 𝑜𝑑𝑒𝑟 𝑛=𝑘 𝑏𝑖𝑛 𝑛−1,𝑘−1 +𝑏𝑖𝑛 𝑛−1,𝑘 ,𝑠𝑜𝑛𝑠𝑡 Übung 5* – Binomialkoeffizienten und Pascalsches Dreieck Mathematischer Hintergrund 2: Für die Binomialkoeffizienten gibt es zwei wichtige Zusammenhänge: 𝑛 𝑘 = 𝑛 𝑛−𝑘 𝑛 𝑘 = 𝑛−1 𝑘−1 + 𝑛−1 𝑘 Beweise diese Formeln! Die zweite Formel ist eine Rekursionsvorschrift. Schreibt man 𝑛 𝑘 als Funktion mit zwei Argumenten, gilt: 𝑏𝑖𝑛 𝑛,𝑘 = 1 , 𝑤𝑒𝑛𝑛 𝑘=0 𝑜𝑑𝑒𝑟 𝑛=𝑘 𝑏𝑖𝑛 𝑛−1,𝑘−1 +𝑏𝑖𝑛 𝑛−1,𝑘 ,𝑠𝑜𝑛𝑠𝑡   Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 5* – Binomialkoeffizienten und Pascalsches Dreieck Mathematischer Hintergrund 3: Die Binomialkoeffizienten tauchen im Binomischen Lehrsatz auf: 𝑎+𝑏 𝑛 = 𝑎 𝑛 + 𝑛 1 𝑎 𝑛−1 𝑏+ 𝑛 2 𝑎 𝑛−2 𝑏 2 + 𝑛 3 𝑎 𝑛−3 𝑏 3 +…+ 𝑛 𝑛−2 𝑎 2 𝑏 𝑛−1 + 𝑛 𝑛−1 𝑎 1 𝑏 𝑛−1 + 𝑏 𝑛 Vewendet man 𝑛 0 = 𝑛 𝑛 =1 und 𝑏 0 = 𝑎 0 =1 kann man in die Summe noch systematischer schreiben: 𝑎+𝑏 𝑛 = 𝑛 0 𝑎 𝑛 𝑏 0 + 𝑛 1 𝑎 𝑛−1 𝑏+ 𝑛 2 𝑎 𝑛−2 𝑏 2 +…+ 𝑛 𝑛−1 𝑎 1 𝑏 𝑛−1 + 𝑛 𝑛 𝑎 0 𝑏 𝑛 Oder mit der praktische Summenschreibwiese: 𝑎+𝑏 𝑛 = 𝑖=0 𝑛 𝑛 𝑖 𝑎 𝑛−𝑖 𝑏 𝑖 Teste die Formel für 𝑎+𝑏 2 und 𝑎+𝑏 3 . Hinweis: Die Formel lässt sich selbstverständlich beweisen. Dies funktioniert z.B. mithilfe des Beweisverfahrens der vollständigen Induktion. Mathematisch ist der Beweis nicht sehr schwer, allerdings braucht man etwa Erfahrung mit der Darstellung der Summenschreibweise. Einen Beweis findest du z.B. hier: https://de.wikibooks.org/wiki/Beweisarchiv:_Algebra:_Ringe:_Binomischer_Lehrsatz   Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 5* – Binomialkoeffizienten und Pascalsches Dreieck Mathematischer Hintergrund 4: Das Pascalsche Dreieck ist ein Zahlenschema, in dem genau die Binomialkoeffizienten stehen: In der fünften Reihe stehen die Werte von 4 0 , 4 1 , 4 2 , 4 3 und 4 4 . Man kann also leicht ablesen: 𝑎+𝑏 4 = 𝑎 4 +4 𝑎 3 𝑏+6 𝑎 2 𝑏 2 +4𝑎 𝑏 3 + 𝑏 4 Wie entsteht eine Reihe aus der darüber stehenden Reihe? Welcher Zusammenhang zwischen den Binomialkoeffizienten wird dabei verwendet? Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen

Übung 5* – Binomialkoeffizienten und Pascalsches Dreieck Informatik a) Lässt sich das Pascalsche Dreieck sinnvoll als Baum interpretieren? b) Schreibe ein Programm, das eine Methode pascalDreieck(int hoehe) enthält, welche das Dreieck ausgibt, i) mit Hilfe einer rekursiv definierten Methode für die Binomialkoeffizienten.  ii) mit Hilfe der als Listen gespeicherten Zeilen des Dreiecks. Für die Liste eignen sich z.B. die Javaklassen Vector oder ArrayList. Informiere dich im Handbuch und in der Javadokumentation über die Methoden dieser Klasse . c) Schreibe eine Methode, die nach Eingabe von 𝑛 die Formel für 𝑎+𝑏 𝑛 ausgibt.   Informatik 11 – 2. Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen