Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Gertrud Zimmermann Geändert vor über 5 Jahren
1
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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
2
rechter Nachfolger vorhanden wahr
Zu suchendes Element: 16 Aktiver Knoten: 10 10 = falsch 10 > falsch rechter Nachfolger vorhanden wahr führe die Methode beim rechten Nachfolger aus Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
3
linker Nachfolger vorhanden wahr
Zu suchendes Element: 16 Aktiver Knoten: 18 18 = falsch 18 > wahr linker Nachfolger vorhanden wahr führe die Methode beim linken Nachfolger aus Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
4
rechter Nachfolger vorhanden wahr
Zu suchendes Element: 16 Aktiver Knoten: 15 15 = falsch 15 > falsch rechter Nachfolger vorhanden wahr führe die Methode beim rechten Nachfolger aus Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
5
gib wahr oder das Element zurück Suche beendet
Zu suchendes Element: 16 Aktiver Knoten: 16 16 = wahr gib wahr oder das Element zurück Suche beendet Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
6
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 = falsch 1 > falsch rechter Nachfolger vorhanden falsch gib falsch oder null zurück Suche beendet Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
7
Struktogramm: daten.schluesselIstGroesserAls(suchwert)
Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
8
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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
9
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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
10
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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
11
Informatik 11 - 2. Die rekursive Datenstruktur Baum – 2
Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
12
Übung 1 – Suchen und Einfügen
Führe die Algorithmen zum Suchen und Einfügen mit einem Baum-Visualisierungs-Tool durch oder: 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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
13
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
14
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
15
Informatik 11 - 1. Die rekursive Datenstruktur Baum – 2
Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
16
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
17
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
18
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
19
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
20
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
21
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
22
Ü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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
23
Ü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!⋅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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
24
𝑏𝑖𝑛 𝑛,𝑘 = 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: 𝑏𝑖𝑛 𝑛,𝑘 = , 𝑤𝑒𝑛𝑛 𝑘=0 𝑜𝑑𝑒𝑟 𝑛=𝑘 𝑏𝑖𝑛 𝑛−1,𝑘−1 +𝑏𝑖𝑛 𝑛−1,𝑘 ,𝑠𝑜𝑛𝑠𝑡 Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
25
Übung 5* – Binomialkoeffizienten und Pascalsches Dreieck
Mathematischer Hintergrund 3: Die Binomialkoeffizienten tauchen im Binomischen Lehrsatz auf: 𝑎+𝑏 𝑛 = 𝑎 𝑛 + 𝑛 1 𝑎 𝑛−1 𝑏+ 𝑛 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: Informatik Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
26
Ü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 , , , und 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 Die rekursive Datenstruktur Baum – 2.2 Suchen und Einfügen
27
Ü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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.