Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Emma Schwarz Geändert vor über 5 Jahren
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; FJ; 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; FJ; J ist fertig abgearbeitet zurück zu F; FK; 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; FJ; J ist fertig abgearbeitet zurück zu F; FK; 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; FJ; J ist fertig abgearbeitet zurück zu F; FK; 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; FJ; J ist fertig abgearbeitet zurück zu F; FK; 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; FJ; J ist fertig abgearbeitet zurück zu F; FK; 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 FJ; J fertig FK; 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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.