Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Binärbäume Klaus Becker 2003. KB Binärbäume 2 Datenstrukturierung mit Bäumen Wolf; 31 Löwe; 12 Esel; 4 Jaguar; 8 Gorilla; 23 Affe; 24Kamel; 45Giraffe;

Ähnliche Präsentationen


Präsentation zum Thema: "Binärbäume Klaus Becker 2003. KB Binärbäume 2 Datenstrukturierung mit Bäumen Wolf; 31 Löwe; 12 Esel; 4 Jaguar; 8 Gorilla; 23 Affe; 24Kamel; 45Giraffe;"—  Präsentation transkript:

1 Binärbäume Klaus Becker 2003

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

3 KB Binärbäume 3 Teil 1 Termbäume

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

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

6 KB Binärbäume 6 Objektorientierte Modellierung inhalt = * rechtslinks inhalt = + rechtslinks inhalt = x rechtslinks inhalt = 3 rechtslinks inhalt = 2 rechtslinks inhalt = x rechtslinks inhalt = * rechtslinks inhalt = 5 rechtslinks inhalt = – rechtslinks

7 KB Binärbäume 7 Objektorientierte Modellierung * + x3 – 5*

8 KB Binärbäume 8 OOA-Modell Knoten inhalt:... links: Knoten rechts: Knoten... Baum wurzel: Knoten... kennt

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

10 KB Binärbäume 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 KB Binärbäume 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 KB Binärbäume 12 Erzeugung des Termbaums * + x3 2x – 5* Aufgabe: Ein Binärbaum (wie der hier dargestellte) soll mit Hilfe der bisher implementierten Baumoperationen erzeugt werden.

13 KB Binärbäume 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); * + x3 2x – 5*

14 KB Binärbäume 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)))); * + x3 2x – 5*

15 KB Binärbäume 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. * + x3 2x – 5*

16 KB Binärbäume 16 Preorder-Traversierung eines Binärbaums * + x3 2x – 5* * + x 3 - * 2 x 5 Verarbeite die Wurzel Traversiere den linken Teilbaum in Preorder Traversiere den rechten Teilbaum in Preorder

17 KB Binärbäume 17 Inorder-Traversierung eines Binärbaums * + x3 2x – 5* x + 3 * 2 * x - 5 Traversiere den linken Teilbaum in Inorder Verarbeite die Wurzel Traversiere den rechten Teilbaum in Inorder

18 KB Binärbäume 18 Postorder-Traversierung eines Binärbaums * + x3 2x – 5* x x * 5 - * Traversiere den linken Teilbaum in Postorder Traversiere den rechten Teilbaum in Postorder Verarbeite die Wurzel

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

20 KB Binärbäume 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 KB Binärbäume 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 * + x3 2x – 5* x = 3: Auswertung liefert 6

22 KB Binärbäume 22 Rekursive Problemreduktion baum.auswerten(k.links,w) * + x3 2x – 5* if k.getInhalt = ' * ' then result := baum.auswerten(k.rechts,w) baum.auswerten(k,w) *

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

24 KB Binärbäume 24 Aufgabe Implementieren Sie die Operation auswerten und ergänzen Sie das Testprogramm. Zur Kontrolle: Termbaum2

25 KB Binärbäume 25 Teil 2 Suchbäume

26 KB Binärbä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 KB Binärbäume 27 Prototyp

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

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

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

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

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

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

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

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

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

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

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

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

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

41 KB Binärbäume 41 Einfügen: Algorithmus

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

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

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

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

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

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

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

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

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

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

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

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

54 KB Binärbäume 54 Suchen: Algorithmus

55 KB Binärbäume 55 Objektorientierte Modellierung Knoten - begriff: string - zeile: integer - links: Knoten - rechts: Knoten + create(b: string; z: int.; l,r: Knoten) + getBegriff: string + getZeile: integer + getLinks: Knoten + getRechts: Knoten Baum - wurzel: Knoten + 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) Wolf; 31 Löwe; 12 Esel; 4 Jaguar; 8Panther; 4 Pfau; 27 Esel; 9 kennt 0..2 kennt 0..1

56 KB Binärbäume 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 KB Binärbäume 57 Teil 3 Zusammenfassung: Dynamische Datenstrukturen

58 KB Binärbäume 58 Datenstrukturierung Ein Grundproblem der Programmierung: Daten möglichst strukturgetreu zu repräsentieren * + x3 2x – 5*

59 KB Binärbäume 59 Datentypen / Datenstrukturen Eine Datenstruktur legt den Aufbau von komplexen Wertebereichen aus einfacheren Wertebereichen fest. Beispiele (für elementare Datenstrukturen): > Reihung / Feld > Verbund 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)

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

61 KB Binärbäume 61 Erzeugung dynamischer Datenstrukturen Erzeugung mit Hilfe von Referenzattributen (Pointer) Erzeugung mit Hilfe vordefinierter KLassen TList; TStringList; TStack;...

62 KB Binärbäume 62 Literaturhinweise Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag H.-P. Gumm u. M. Sommer: Einführung in die Informatik. Oldenbourg Verlag


Herunterladen ppt "Binärbäume Klaus Becker 2003. KB Binärbäume 2 Datenstrukturierung mit Bäumen Wolf; 31 Löwe; 12 Esel; 4 Jaguar; 8 Gorilla; 23 Affe; 24Kamel; 45Giraffe;"

Ähnliche Präsentationen


Google-Anzeigen