Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann."—  Präsentation transkript:

1 1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann

2 2 Kurze Wiederholung (Gerichtete) Graphen, Knoten, Kanten, Gewichte Adjazenzmatrix, Adjazenzlisten, doppelt verkettete Kantenlisten Durchlaufordnungen: Besuchen aller Knoten eines Graphen in bestimmter Reihenfolge: Breitensuche: Brüder eines Knotens vor den Söhne Tiefensuche: Söhne eines Knotens vor den Brüder Allgemeiner Besuchsalgorithmus Verwendung eines Stapels: Tiefensuche Verwendung einer Schlange: Breitensuche

3 3 Expansion eines Graphen in einen Baum Sei G = (V, E) ein gerichteter Graph und v ein Knoten aus V. Dann ist die Expansion X(v) von G in v wie folgt definiert: 1.Falls v keine Nachfolger hat, so ist X(v) der Baum, der nur aus dem Knoten v besteht. 2.Falls v 1, …, v k die Nachfolger von v sind, so ist X(v) der Baum. v X(v 1 )

4 4 Beispiel: Baumexpansion eines Graphen

5 5 Tiefendurchlauf: DFS rekursiv Rekursive Formulierung des Tiefendurchlaufs: DFS(v): Markiere v als besucht und füge v zu R hinzu; for each jede von v ausgehende Kante (v, v) do: if v ist nicht besucht then DFS(v)

6 6 Tiefendurchlauf: DFS mit Stapel Formulierung des Tiefendurchlaufs mit Hilfe eines Stapels S: DFS(s): Initialisiere S als Stapel mit einzigem Element s; while S do {Nehme oberstes Element u von S herunter; if besucht(u) = false then { setze besucht(u) = true; for each Kante (u, v), die von u ausgeht do stapele v auf S } } /* end while

7 7 Beispiel

8 8 Breitendurchlauf: BFS mit Schlange Q BFS(s): Setze besucht(s) = true und für alle anderen Knoten v setze besucht(v) = false; Setze Q = {s}; Initialisiere aktuellen BFS-Baum T = ; while Q do {entferne erstes Element u von Q; betrachte jede von u ausgehende Kante (u, v): if besucht(v) = false then {setze besucht(v) = true; füge Kante (u, v) zum BFS-Baum T hinzu; füge v am Ende von Q ein} } */ end while

9 9 Beispiel

10 10 Dijstras 1-to-all Shortest-Path-Algorithmus Idee: Lasse ausgehend von einem Startknoten s einen Teilgraphen von Knoten mit bereits bekannter minimaler Distanz zu s wachsen. Grüne Knoten: Alle Kanten zu Nachfolgerknoten wurden bereits betrachtet; diese liegen daher im bereits erkundeten Teilgraphen und können grün oder gelb sein. Gelbe Knoten: Bilden den Rand des bereits erkundeten Teilgraphen; für sie sind die ausgehenden Kanten noch nicht betrachtet worden. In jedem Schritt wird der gelbe Knoten mit minimalem Abstand von s ins Innere des Teilgraphen übernommen, also grün gefärbt; seine Nachfolgerknoten werden, soweit sie noch nicht im Teilgraphen liegen, zu neuen gelben Knoten. Für gelbe Knoten, die so erneut erreicht wurden, sind die für sie bisher bekannten kürzesten Pfade ggfs. zu korrigieren.

11 11 Algorithmus Dijkstra(v) (Formulierung nach Güting/Dieker 2003) GRÜN = ; GELB = {v}; dist (v) = 0; while GELB do {wähle w GELB so, dass für alle w GELB: dist (w) dist (w); färbe w grün; for each w i succ (w) do if w i (GELB GRÜN) /* noch nicht besuchter Knoten*/ then färbe die Kante (w, w i ) rot; färbe w i gelb; dist (w i ) = dist (w) + cost (w, w i ) elseif w i GELB /*wi erneut erreicht*/ then if dist (w i ) > dist (w) + cost (w, w i ) then färbe die Kante (w, w i ) gelb; färbe die bisher rote Kante zu w i gelb; dist (w i ) = dist (w) + cost (w, w i ) else färbe (w, w i ) gelb end if/* w i GRÜN*/ else färbe (w, w i ) gelb end if end for }end while

12 12 Idee des Verfahrens von Dijkstra Anfangs ist die Entfernung d(v) aller von s verschiedener Knoten. Die Entfernung von s von sich selbst ist natürlich 0. Wir betrachten eine Menge PQ von Knoten-Entfernungs-Paaren (v, d(v)), die wir mit {(s; 0)} initialisieren. Dann wird PQ nach dem Prinzip Knoten mit kürzester Distanz von s zuerst schrittweise bearbeitet, bis PQ leer ist: 1. Entferne Knoten v aus PQ mit minimaler Distanz d(v) von s, d(v) ist der kürzeste Distanz von s nach v. 2. Für jeden Knoten w V mit (v,w) E verfahre wie folgt: (a) Falls (w, d(w)) PQ, ersetze (w, d(w)) durch (w, min{d(w); d(v) + c(v,w)}). (b) Falls w nicht in PQ enthalten ist, füge (w, (d(v) + c(v,w)) in PQ ein.

13 13 A B C F D E Beispiel


Herunterladen ppt "1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann."

Ähnliche Präsentationen


Google-Anzeigen