Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "2. Die rekursive Datenstruktur Baum 2.2 Suchen und Einfügen"—  Präsentation transkript:

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


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

Ähnliche Präsentationen


Google-Anzeigen