Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Binärbäume Klaus Becker 2003.

Ähnliche Präsentationen


Präsentation zum Thema: "Binärbäume Klaus Becker 2003."—  Präsentation transkript:

1 Binärbäume Klaus Becker 2003

2 Datenstrukturierung mit Bäumen
Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

3 Teil 1 Termbäume

4 Termbaum Ein Termbaum dient dazu, einen Rechenterm wie z. B. (x+3)*(2x-5) strukturell zu repräsentieren. * + x 3 2 5 Ziel: Entwicklung eines Programms zur Verarbeitung von Term(bäum)en.

5 Binärbaum Wurzel * + x 3 * 5 linker Teilbaum 2 x rechter Teilbaum Ein Binärbaum ist leer oder besteht aus einer Wurzel und zwei Binärbäumen, dem linken und rechten Teilbaum.

6 Objektorientierte Modellierung
inhalt = * links rechts inhalt = + inhalt = – links rechts links rechts inhalt = x inhalt = 3 inhalt = * inhalt = 5 links rechts links rechts links rechts links rechts inhalt = 2 inhalt = x links rechts links rechts

7 Objektorientierte Modellierung
* + x 3 * 5

8 OOA-Modell 0..1 0..2 kennt kennt Baum Knoten wurzel: Knoten
inhalt: ... links: Knoten rechts: Knoten kennt ... ...

9 OOD-Modell 0..2 0..1 kennt kennt ist Baum Knoten - wurzel: Knoten
- inhalt: string - links: Knoten - rechts: Knoten kennt + create(w: Knoten) + getWurzel: Knoten + istLeer: boolean + ausgebenInOrder(k: Knoten): string + ausgebenPreOrder(k: Knoten): string + ausgebenPostOrder(k: Knoten): string + create(i: string; l,r: Knoten) + getInhalt: string + getLinks: Knoten + getRechts: Knoten ist TermBaum + auswerten(k: Knoten; w: integer): integer

10 Implementierung constructor TKnoten.create(inhalt: string; links, rechts: TKnoten); begin self.inhalt := inhalt; self.links := links; self.rechts := rechts end; function TKnoten.getInhalt: string; begin result := inhalt; end; function TKnoten.getLinks: TKnoten; begin result := links; end; function TKnoten.getRechts: TKnoten; begin result := rechts; end;

11 Implementierung constructor TBaum.create(w: TKnoten); begin wurzel := w; end; function TBaum.istLeer: boolean; begin result := (wurzel = nil); end; function TBaum.getWurzel: TKnoten; begin result := wurzel; end; procedure TBaum.setWurzel(k: TKnoten); begin wurzel := k; end;

12 Erzeugung des Termbaums
Aufgabe: Ein Binärbaum (wie der hier dargestellte) soll mit Hilfe der bisher implementierten Baumoperationen erzeugt werden. * + x 3 2 5

13 Erzeugung des Termbaums – Version 1
k1 := TKnoten.create('2', nil, nil); k2 := TKnoten.create('x', nil, nil); k3 := TKnoten.create('*', k1, k2); k4 := TKnoten.create('5', nil, nil); k5 := TKnoten.create('-', k3, k4); k6 := TKnoten.create('x', nil, nil); k7 := TKnoten.create('3', nil, nil); k8 := TKnoten.create('+', k6, k7); k9 := TKnoten.create('*', k8, k5); baum := TTermBaum.create(k9); * + x 3 2 5

14 Erzeugung des Termbaums – Version 2
baum := TTermBaum.create( TKnoten.create('*', TKnoten.create('+', TKnoten.create('x', nil, nil), TKnoten.create('3', nil, nil)), TKnoten.create('-', TKnoten.create('*', TKnoten.create('2', nil, nil), TKnoten.create('x', nil, nil)), TKnoten.create('5', nil, nil)))); * + x 3 2 5

15 Traversierung eines Binärbaums
Aufgabe: Ein Binärbaum (wie der hier dargestellte) soll nach einer vorgegeben Regel durchlaufen und verarbeitet (z. B. ausgegeben) werden. * + x 3 * 5 2 x

16 Preorder-Traversierung eines Binärbaums
* + x 3 * 5 2 x Verarbeite die Wurzel Traversiere den linken Teilbaum in „Preorder“ Traversiere den rechten Teilbaum in „Preorder“ * + x 3 - * 2 x 5

17 Inorder-Traversierung eines Binärbaums
* + x 3 * 5 2 x Traversiere den linken Teilbaum in „Inorder“ Verarbeite die Wurzel Traversiere den rechten Teilbaum in „Inorder“ x + 3 * 2 * x - 5

18 Postorder-Traversierung eines Binärbaums
* + x 3 * 5 2 x Traversiere den linken Teilbaum in „Postorder“ Traversiere den rechten Teilbaum in „Postorder“ Verarbeite die Wurzel x x * 5 - *

19 Preorder-Ausgabe Deklaration:
function TBaum.ausgebenPreOrder(k:TKnoten):String; begin if (k = nil) then result := '' else result := k.getInhalt ausgebenPreOrder(k.getLinks) ausgebenPreOrder(k.getRechts); end; Aufruf: baum.ausgebenPreOrder(baum.getWurzel)

20 Aufgabe Im Ordner „Termbaum1“ finden Sie ein vorstrukturiertes Programm zur Erzeugung und Verarbeitung von Binärbäumen / Termbäumen. Ergänzen Sie die fehlenden Teile (Erzeugung eines Binärbaums und Ausgabe in Preorder, Inorder, Postorder). Zur Kontrolle: Termbaum2

21 Auswertung eines Termbaums
Aufgabe: Ein Termbaum (wie der hier dargestellte) soll bzgl. eines vorgegeben x-Wertes ausgewertet werden: x-Wert einsetzen und Gesamtwert berechnen * + x 3 2 5 x = 3: Auswertung liefert 6

22 Rekursive Problemreduktion
baum.auswerten(k,w) if k.getInhalt = '*' then result := * + x 3 * 5 2 x baum.auswerten(k.links,w) baum.auswerten(k.rechts,w) *

23 Rekursionsanfang baum.auswerten(k,w)
if ((k.getRechts = nil) and (k.getLinks = nil)) then x 3 if k.getInhalt = 'x' then result := w else result := StrToInt(k.getInhalt);

24 Aufgabe Implementieren Sie die Operation „auswerten“ und ergänzen Sie das Testprogramm. Zur Kontrolle: Termbaum2

25 Teil 2 Suchbäume

26 Textindex Die #Geschichte# des Kölner Zoos #Gründung# des Zoo und die ersten Jahre Auf Betreiben von Dr. Caspar #Garthe#, dem ersten Oberlehrer an der Höheren Bürgerschule am Quatermarkt zu Köln, schlossen sich wohlhabende und einflußreiche, zugleich tierliebende und zoobegeisterte Bürger der Stadt zu einer Aktiengesellschaft zusammen, um 1860 in Köln einen #Zoologischen Garten# zu gründen. In kaum einem anderen Zoo läßt sich die #Entwicklung# der Zoologischen Gärten anhand noch erhaltener #Tierhäuser und -anlagen# aus den verschiedenen #Epochen# so gut nachvollziehen wie im Kölner Zoo. Das älteste Monument ist das 1863 unter Leitung von Dr. Heinrich #Bodinus# ( ) erbaute #Elefantenhaus# in #maurischem Stil#. ... Affeninsel; 33 Blockhaus-Stil; 20 Bodinus; 16 Elefantenhaus; 79 Elefantenhaus; 17 Entwicklung; 11 Epochen; 14 Funck; 19 Garthe; 4 Geschichte; 1 Gründung; 2 Hagenbeck; Ziel: Es soll ein Programm entwickelt werden, mit dessen Hilfe ein Textindex erstellt und zum „Nachschlagen“ benutzt werden kann. Im vorliegenden Fall soll der Textindex die Zeilen-nummern der markierten Begriffe enthalten.

27 Prototyp

28 Zur Wahl der Datenstruktur
Affe; 24 Esel; 9 Esel; 4 Giraffe; 6 Gorilla; 23 Jaguar; 8 Liste  Lineare Suche Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23 Binärbaum  Binäre Suche

29 Suchbaum alle  Wurzel alle > Wurzel Löwe; 12 Esel; 4 Pfau; 27
Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23 alle  Wurzel alle > Wurzel

30 Suchbaum alle  Wurzel alle > Wurzel Löwe; 12 Esel; 4 Pfau; 27
Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23 alle  Wurzel alle > Wurzel

31 Einfügen: Problemspezifikation
Ausgangszustand: Fasan; 13 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Zielzustand: Fasan; 13 Gorilla; 23

32 Einfügen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert neuer Begriff  aktueller Begriff linker Teilbaum nicht leer Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

33 Einfügen: Lösungsstrategie
Problemreduktion: Einfügen im linken Teilbaum Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

34 Einfügen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert neuer Begriff > aktueller Begriff rechter Teilbaum nicht leer Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

35 Einfügen: Lösungsstrategie
Problemreduktion: Einfügen im rechten Teilbaum Fasan; 13 neu: Löwe; 12 aktuell: Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

36 Einfügen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert neuer Begriff  aktueller Begriff linker Teilbaum nicht leer Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 aktuell: Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

37 Einfügen: Lösungsstrategie
Problemreduktion: Einfügen im linken Teilbaum Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 aktuell: Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

38 Einfügen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert neuer Begriff  aktueller Begriff linker Teilbaum ist leer Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 aktuell: Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

39 Einfügen: Lösungsstrategie
Problemlösung: linker Nachfolger  neuer Knoten mit neuem Begriff Fasan; 13 neu: Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 aktuell: Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Fasan; 13 Gorilla; 23

40 Einfügen: Lösungsstrategie
Sonderfall: aktueller Wurzelknoten existiert nicht neu: Fasan; 13 aktuell: Problemlösung: Wurzel  neuer Knoten mit neuem Begriff neu: Fasan; 13 aktuell: Fasan; 13

41 Einfügen: Algorithmus

42 Suchen: Problemspezifikation
Ausgangszustand: Esel : Suchbegriff Zielzustand: Suchergebnis: Esel; 4 Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

43 Suchen: Problemspezifikation
Ausgangszustand: Esel : Suchbegriff Suchergebnis: Esel; 4 Esel; 9 Idee: Preorder-Durchlauf mit Aufsammeln aller Treffer Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

44 Suchen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert Suchbegriff  aktueller Begriff Esel : Suchbegriff Suchergebnis: Löwe; 12 : aktuell Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

45 Suchen: Lösungsstrategie
Problemreduktion: if Suchbegriff = aktueller Begriff then Daten aufnehmen linken Teilbaum durchsuchen Esel : Suchbegriff Suchergebnis: Löwe; 12 : aktuell Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

46 Suchen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert Suchbegriff  aktueller Begriff Esel : Suchbegriff Suchergebnis: Löwe; 12 Esel; 4 : aktuell Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

47 Suchen: Lösungsstrategie
Problemreduktion: if Suchbegriff = aktueller Begriff then Daten aufnehmen linken Teilbaum durchsuchen Esel : Suchbegriff Suchergebnis: Esel; 4 Löwe; 12 Esel; 4 : aktuell Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

48 Suchen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert Suchbegriff  aktueller Begriff Esel : Suchbegriff Suchergebnis: Esel; 4 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 : aktuell Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

49 Suchen: Lösungsstrategie
Problemreduktion: if Suchbegriff = aktueller Begriff then Daten aufnehmen linken Teilbaum durchsuchen Esel : Suchbegriff Suchergebnis: Esel; 4 Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 : aktuell Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

50 Suchen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert Suchbegriff > aktueller Begriff Esel : Suchbegriff Suchergebnis: Esel; 4 Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 : aktuell Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

51 Suchen: Lösungsstrategie
Problemreduktion: rechten Teilbaum durchsuchen Esel : Suchbegriff Suchergebnis: Esel; 4 Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 : aktuell Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 Gorilla; 23

52 Suchen: Lösungsstrategie
Situation: aktueller Wurzelknoten existiert nicht Esel : Suchbegriff Suchergebnis: Esel; 4 Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 : aktuell Gorilla; 23

53 Suchen: Lösungsstrategie
Problemlösung: Mache nichts Esel : Suchbegriff Suchergebnis: Esel; 4 Esel; 9 Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 Affe; 24 Giraffe; 6 Kamel; 45 Tiger; 6 Zebra; 10 : aktuell Gorilla; 23

54 Suchen: Algorithmus

55 Objektorientierte Modellierung
Löwe; 12 Esel; 4 Pfau; 27 Esel; 9 Jaguar; 8 Panther; 4 Wolf; 31 0..1 0..2 Baum Knoten - wurzel: Knoten kennt - begriff: string - zeile: integer - links: Knoten - rechts: Knoten kennt + create(w: Knoten) + getWurzel: Knoten + istLeer: boolean + initialisieren + einfuegen(b: string; z: integer; aktuell: TKnoten) + suchen(b: string; k: TKnoten; var s: TStringList) + ausgeben(k: TKnoten; var s: TStringList) + create(b: string; z: int.; l,r: Knoten) + getBegriff: string + getZeile: integer + getLinks: Knoten + getRechts: Knoten

56 Aufgabe Im Ordner „Suchbaum1“ finden Sie ein vorstrukturiertes Programm zur Erzeugung und Verarbeitung von Suchbäumen. Implementieren Sie die Operation „einfuegen“, „suchen“ und „ausgeben“. Zur Kontrolle: Suchbaum2

57 Zusammenfassung: Dynamische Datenstrukturen
Teil 3 Zusammenfassung: Dynamische Datenstrukturen

58 Datenstrukturierung * + x 3 2 5 Ein Grundproblem der Programmierung: Daten möglichst strukturgetreu zu repräsentieren

59 Datentypen / Datenstrukturen
Ein Datentyp legt einen Wertebereich und die Grundoperationen, die auf die Elemente des Wertebereichs angewandt werden können, fest. Beispiele (für elementare Datentypen): > boolean (Wahrheitswert) > char (Zeichen) > integer (ganze Zahl) > real (Dezimalzahl) Eine Datenstruktur legt den Aufbau von komplexen Wertebereichen aus einfacheren Wertebereichen fest. Beispiele (für elementare Datenstrukturen): > Reihung / Feld > Verbund

60 Dynamische Datenstrukturen
Dynamische Datenstrukturen werden benutzt, wenn sich die Struktur der Dateneinheiten zur Laufzeit dynamisch verändern kann.

61 Erzeugung dynamischer Datenstrukturen
Erzeugung mit Hilfe von Referenzattributen (Pointer) Erzeugung mit Hilfe vordefinierter KLassen TList; TStringList; TStack; ...

62 Literaturhinweise Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag 1999. H.-P. Gumm u. M. Sommer: Einführung in die Informatik. Oldenbourg Verlag 2002. ...


Herunterladen ppt "Binärbäume Klaus Becker 2003."

Ähnliche Präsentationen


Google-Anzeigen