3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen

Slides:



Advertisements
Ähnliche Präsentationen
8. Termin Teil B: Wiederholung Begriffe Baum
Advertisements

Vortrag von Stephanie Weirauch Jens Pleger Peter Jancke Frank Wejmelka
Grundlagen des A*-Algorithmus und Anwendung in der Routenplanung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann.
Graphen Ein Graph ist eine Kollektion von Knoten und Kanten. Knoten sind einfache Objekte. Sie haben Namen und können Träger von Werten, Eigenschaften.
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Programmieren 2 Future Car Projekt Praktikum 6 - Graphen
Programmieren 2 Future Car Projekt Praktikum 6
Programmieren 2 Future Car Projekt Praktikum 6
FB Informatik Prof. Dr. R.Nitsch Programmieren 2 Future Car Projekt Praktikum 6 - Graphen Reiner Nitsch - Speichern von Graphen -
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 – Graphen)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26 - Graphen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Klausur „Diskrete Mathematik II“
Vortrag über Graphen Von Jörg Hendricks.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra.
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Algorithmus von Dijkstra. 0 Algorithmus von Dijkstra s Priority Queue PQ: Knoten, Priorität Weglänge Kandidatenmenge.
Graphen und ihre Implementierung
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
Jan Hinzmann – – GIS Praxis II – Slide 1/10 Der Algorithmus von Dijkstra (Berechnung kürzester Wege in bewerteten Graphen) GIS Praxis II, Jan Hinzmann,
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Suche des kürzesten Weges in einem Netz.
Der A*-Algorithmus.
Binärbäume.
Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Arbeiten mit WordSmith 4. Inhalt 1. Arbeiten mit der Funktion Wortliste (im getaggten Korpus) 1. Arbeiten mit der Funktion Wortliste (im getaggten Korpus)
Tutorium Software-Engineering SS14 Florian Manghofer.
CZ Wohngeld Eine Neuentwicklung von BKA1Win Nordrhein-Westfalen.
Benutzer-Update mit BImport paedML® 3.0 Novell
Graphen.
Anforderungen an die neue Datenstruktur
Schlange und Stapel.
Klausur „Diskrete Mathematik II“
Adiazenzmatrix des Graphen
Eine Näherungslösung für das Problem des Handlungsreisenden
Lösung der Aufgabe 1: Die Erweiterung des Diagramms auf „Winged Egde“ besteht in zwei Beziehungen, nr-Kante und vl-Kante, zwischen der Klasse Kante. Jede.
Musterlösung zur Klausur "Diskrete Mathematik" vom
Das Problem des Handlungsreisenden
ARIS Interactive Guide 9- Modell
Referenten: Moritz S., Ina B. und Sebastian R.
Der Algorithmus nach Dijkstra
Der Dijkstra-Algorithmus
Allgemeine Befehle für die allgemeine Liste
Übungen Übungsanmeldung Übungskorrektur
Wiederholung Breitensuche BFS mit Startknoten s Tiefensuche
Graphen.
TexPoint fonts used in EMF.
6. Wiederholungen und Zählschleifen
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
WPU Angewandte Naturwissenschaften
2. Die rekursive Datenstruktur Baum 2.1 Von der Liste zum Baum
2. Vererbung und Kapselung
1. Die rekursive Datenstruktur Liste 1
2. Die rekursive Datenstruktur Baum 2.2 Suchen und Einfügen
Datenstrukturen und Softwareentwicklung
9. Vererbung und Polymorphie
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
3. Die Datenstruktur Graph 3.1 Einfache Graphen
2.4 Durchlaufen von Bäumen
1. Die rekursive Datenstruktur Liste 1
DB2 – SS 2019 von Baum allgemein bis B*-Baum
Informatik II – Übung 4 Gruppe 3
2. Die rekursive Datenstruktur Baum 2.3 Baum und Kompositum
DB2 – SS 2019 von Baum allgemein bis B*-Baum
 Präsentation transkript:

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

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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

A  B Informatik 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

A  B  D Informatik 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

A  B  D H ; H ist fertig abgearbeitet Informatik 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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

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

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

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Übung 1 – Testen des Algorithmus Teste den Algorithmus zur Tiefensuche für einige Graphen: https://www.cs.usfca.edu/~galles/visualization/DFS.html Informatik 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Ü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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Ü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 110 - 114 Informatik 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Ü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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Ü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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Ü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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Ü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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Ü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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Übung 7* – Suche des kürzesten Weges Klassenkarte: Erläuterungen: Buch S. 116 - 118 Informatik 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

Der Dijkstra Algorithmus zur Bestimmung des kürzesten Weges Simulationen: https://www.cs.usfca.edu/~galles/visualization/Dijkstra.html http://uweschmidt.org/projects/dijkstravis Informatik 11 - 3. Die Datenstruktur Graph – 3.3 Durchlaufen von Graphen

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