Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen

Ähnliche Präsentationen


Präsentation zum Thema: "3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen"—  Präsentation transkript:

1 3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
Finde bei einem zusammenhängenden Graphen einen Weg, der jeden Knoten mindestens einmal besucht: Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

2 3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
Ein möglicher Algorithmus ist die Tiefensuche (Depth Search) : Wähle einen Startknoten und markiere ihn als besucht. Besuche einen der möglichen Nachbarn (bei mehreren Nachbarn z.B. alphabetisch oder numerisch auswählen) und markiere ihn als besucht. Besuche von diesem Knoten wieder einen Nachbarn, der noch nicht besucht wurde. Sind bei einem Knoten alle Nachbarn markiert oder führt kein Weg weiter, so ist dieser fertig abgearbeitet. Gehe zu dem Nachbarknoten zurück, von dem aus dieser Knoten besucht wurde. Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

3 Startknoten: A A Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

4 A  B Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

5 A  B  D Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

6 A  B  D H ; H ist fertig abgearbeitet
Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

7 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

8 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B; B  E Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

9 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

10 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

11 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

12 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet zurück zu C; C ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

13 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet zurück zu C; C ist fertig abgearbeitet zurück zu F; FJ; J ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

14 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet zurück zu C; C ist fertig abgearbeitet zurück zu F; FJ; J ist fertig abgearbeitet zurück zu F; FK; K ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

15 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet zurück zu C; C ist fertig abgearbeitet zurück zu F; FJ; J ist fertig abgearbeitet zurück zu F; FK; K ist fertig abgearbeitet zurück zu F; F ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

16 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet zurück zu C; C ist fertig abgearbeitet zurück zu F; FJ; J ist fertig abgearbeitet zurück zu F; FK; K ist fertig abgearbeitet zurück zu F; F ist fertig abgearbeitet zurück zu E; E ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

17 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet zurück zu C; C ist fertig abgearbeitet zurück zu F; FJ; J ist fertig abgearbeitet zurück zu F; FK; K ist fertig abgearbeitet zurück zu F; F ist fertig abgearbeitet zurück zu E; E ist fertig abgearbeitet zurück zu B; B ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

18 A  B  D H ; H ist fertig abgearbeitet
zurück zu D; D ist fertig abgearbeitet zurück zu B;B  E  F C  G; G ist fertig abgearbeitet zurück zu C; C ist fertig abgearbeitet zurück zu F; FJ; J ist fertig abgearbeitet zurück zu F; FK; K ist fertig abgearbeitet zurück zu F; F ist fertig abgearbeitet zurück zu E; E ist fertig abgearbeitet zurück zu B; B ist fertig abgearbeitet zurück zu A; A ist fertig abgearbeitet Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

19 A  B  D H ; H fertig; D fertig B  E  F C  G; G fertig; C fertig
Zusammenfassung: A  B  D H ; H fertig; D fertig B  E  F C  G; G fertig; C fertig FJ; J fertig FK; K fertig F fertig E fertig B fertig A fertig Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

20 Übung 1 – Testen des Algorithmus
Teste den Algorithmus zur Tiefensuche für einige Graphen: Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

21 Übung 2 – Implementieren der Tiefensuche
Vorlage: Tiefensuche_Vorlage Ergänze die Klasse GRAPH_MATRIX um die Methoden zur Tiefensuche: Klasse GRAPH_MATRIX void tiefensuche(String startknoten) Wenn der Startknoten existiert (die Knotennummer ist ungleich -1), werden in dem Feld besucht vom Typ boolean alle Werte auf false gesetzt. Anschließend ruft man die Methode besuchen auf, welche die Tiefensuche durchführt. Klasse GRAPH_MATRIX void besuchen(int knotennummer) Der aktive Knoten wird durch den entsprechenden Eintrag im Feld besucht auf besucht gesetzt und in der Konsole ausgegeben. In der Matrix sucht man in der Zeile des aktiven Knotens nach möglichen Nachbarknoten, d.h. vom aktiven Knoten bis zum Ende nach Einträgen ungleich -1. Gibt es in dieser Zeile eine Kante, deren Zielknoten außerdem noch nicht besucht wurde, geht man in die Tiefe und besucht durch rekursiven Aufruf der Methode besuchen den Abzweigknoten. Ist die Zeile der Matrix vollständig durchlaufen, so ist der Knoten auch fertig abgearbeitet. Dies wird in der Konsole ausgegeben. Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

22 Übung 2 – Implementieren
Vorlage: Tiefensuche_Vorlage Ergänze die Klasse GRAPH_MATRIX um die Methoden zur Tiefensuche: Ausführliche Erklärung der Methoden: Buch, Seiten Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

23 Ein anderer Algorithmus zum Graphendurchlauf
Markiere den Startknoten v als besucht und alle anderen Knoten als nicht besucht. Füge den Startknoten v in eine zunächst leere Datenstruktur D ein. D besitzt dabei ein Ordnungsprinzip zum Einfügen und Entnehmen. Wiederhole, solange D nicht leer ist: Entnimm einen Knoten w aus D. Markiere alle noch nicht besuchte Nachbarn von w als besucht und füge sie in D ein. Die der Reihe nach aus D entnommenen Knoten ergeben den gesuchten Weg. Je nach Art der Datenstruktur erhält man verschiedene Durchlaufalgorithmen: Ist D ein Stapel (Stack) (LIFO), erhält man die Tiefensuche. Ist D eine Warteschlange (Queue) (FIFO), erhält man die Breitensuche. Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

24 Beispiel: Tiefensuche Vorgang Weg durch den Graph Datenstruktur D
Start mit A  {A} A (aus D) entnehmen , noch nicht markierte Nachbarn markieren und einfügen  A {B,C} C entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C  {B,F,G} G entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G  {B,F} F entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G F  {B,E,J,K} K entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G F K  {B,E,J} J entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G F K J  {B,E} E entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G F K J E  {B} B entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G F K J E B  {D} D entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G F K J E B D  {H} H entnehmen, noch nicht markierte Nachbarn markieren und einfügen  A C G F K J E B D H  {} Datenstruktur leer; Suche beendet  Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

25 Übung 3 – Implementieren (Tiefensuche, Stapel)
Implementiere auch die Version der Tiefensuche mit einem Stapel. Verwende dabei die Javaklasse Stack sowohl für den Weg durch den Graph als auch für die Datenstruktur D. Die Referenzklasse der Elemente muss dabei in spitzen Klammern stehen:  Stack<String> stapel = new Stack<String> (); Vorlage: Tiefensuche_Stapel_Vorlage Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

26 Übung 4 – Implementieren (Breitensuche, Queue)
Implementiere die Breitensuche mit einer Warteschlange. Verwende dabei die Javaklasse Vector oder ArrayList sowohl für den Weg durch den Graph als auch für die Datenstruktur D. Vorlage: Breitensuche_Liste_Vorlage Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

27 Übung 5 – Tiefensuche mit Kantenausgabe
Ergänze die Klasse GRAPH_MATRIX um eine rekursive Tiefensuche, bei der die Kanten des Wegs ausgegeben werden. Für den Beispielgraph aus dem Skript lautet die Ausgabe mit dem Startknoten A: Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

28 Übung 6 – Wegsuche mit Kantenausgabe
Ergänze die Klasse GRAPH_MATRIX um eine rekursive Tiefensuche, bei der die Kanten des Wegs vom Startknoten zum Zielknoten ausgegeben werden. Für den Beispielgraph aus dem Skript lautet die Ausgabe mit dem Startknoten H und dem Zielknoten K: Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

29 Übung 7* – Suche des kürzesten Weges
Betrachtet man im Beispiel 6 den Graphen als gewichtet mit den Kantenlängen 1 und die Summe aller Kanten entlang eines Weges als Weglänge, so ist der vom Algorithmus gefundene Weg nicht der kürzeste. Schreibe eine Methode, die alle Wege findet und ihre jeweilige Gesamtlänge ausgibt. Beispielgraph: Ausgabe für die Wegsuche V1-V6 Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

30 Übung 7* – Suche des kürzesten Weges
Klassenkarte: Erläuterungen: Buch S Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

31 Der Dijkstra Algorithmus zur Bestimmung des kürzesten Weges
Der Algorithmus arbeitet nach folgendem Prinzip: Auswahl eines Startknotens Der Startknoten erhält den Eintrag 0 (Gesamte Weglänge). Alle anderen erhalten zunächst den Eintrag "unendlich" und werden als nicht besucht gesetzt. Wiederhole solange noch nicht alle Knoten besucht sind: Suche unter den unbesuchten Knoten denjenigen mit dem kleinsten Eintrag. Setze diesen Knoten als besucht und als neuen aktiven Knoten. Aktualisiere alle Nachbarknoten des aktiven Knotens folgendermaßen: Ist der Weg vom Startknoten über den aktiven Knoten kürzer als der Eintrag des Knotens, ändere den Eintrag und notiere von welchem Knoten der günstigere Weg kommt. Ende Wiederhole Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

32 Der Dijkstra Algorithmus zur Bestimmung des kürzesten Weges
In der Datei Dijkstra_Graph_A_Praes.pdf kannst du den Algortihmus schrittweise für den gezeigten Beispielgraphen nachvollziehen. Zur Notation des  Dijkstra-Algorithmus: Notiere für jeden Schritt eine Tabelle mit zwei Zeilen. Erste Zeile:   Knoten    Zweite Zeile:  Entfernung vom Start Besuchte Knoten einkreisen; aktiven Knoten mit * kennzeichnen; noch nicht besuchte Knoten haben keinen Eintrag (statt ∞); Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

33 Der Dijkstra Algorithmus zur Bestimmung des kürzesten Weges
Simulationen: Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

34 Übung 8– Dijkstra Algorithmus
Führe den Dijkstra-Algorithmus aus und ermittle den kürzesten Weg von A nach H Informatik Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen


Herunterladen ppt "3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen"

Ähnliche Präsentationen


Google-Anzeigen