Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

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

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 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: Falls v keine Nachfolger hat, so ist X(v) der Baum, der nur aus dem Knoten v besteht. Falls v1, …, vk die Nachfolger von v sind, so ist X(v) der Baum <v, X(v1), …, X(vk)>. v X(v1) X(v1) X(v1)

4 Beispiel: Baumexpansion eines Graphen
1 2 4 3 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 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 Beispiel 1 2 3 4 6 8 5 7

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 Beispiel 1 2 3 4 6 8 5 7

10 Dijstra‘s 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 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 wi  succ (w) do if wi  (GELB  GRÜN) /* noch nicht besuchter Knoten*/ then färbe die Kante (w, wi) rot; färbe wi gelb; dist (wi) = dist (w) + cost (w, wi) elseif wi  GELB /*wi erneut erreicht*/ then if dist (wi) > dist (w) + cost (w, wi) then färbe die Kante (w, wi) gelb; färbe die bisher rote Kante zu wi gelb; dist (wi) = dist (w) + cost (w, wi) else färbe (w, wi) gelb end if /* wi  GRÜN*/ end if end for }end while

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 Beispiel A 9 3 F B 5 2 2 1 10 C 4 E 6 D


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

Ähnliche Präsentationen


Google-Anzeigen