Vortrag von Stephanie Weirauch Jens Pleger Peter Jancke Frank Wejmelka WEGE IN GRAPHEN Vortrag von Stephanie Weirauch Jens Pleger Peter Jancke Frank Wejmelka
Inhalt : Graphdefinition und Dijkstra-Algorithmus zweitkürzeste Wege in einem Graphen: Algorithmen von Pollack und Hoffman & Pavley (algorithmusverändernd) zweitkürzeste Wege in einem Graphen. Algorithmus von Azevedo (graphverändernd) Verallgemeinerung auf dritt und k-kürzeste Wege Vorstellung eines Programms
Graphdefinition Graph G=(E,V) besteht aus Knotenmenge V und Kantenmenge E VxV Kante (v,w) verbindet Knoten v und w Beispiel: Straßennetz ! Städte sind Knotenmengen und Straßen bilden Kantenmengen Jeder Kante (v,w) ist Länge l(v,w)>0 zugeordnet
Der Dijkstra Algorithmus (Greedy - Algorithmus) Gegeben Startknoten s und Zielknoten z Kanten haben Gewichte und sind gerichtet Für jeden Knoten v suche kürzesten Weg von s nach v Benutzen von zwei Knotenmengen S und K (S enthält Knoten, für die der kürzeste Weg von s aus bereits bekannt ist K (Kandidaten) enthält mögliche Knoten, deren Distanz zu s am geringsten ist) Jedem Knoten wird eine Distanz dist(v) zugeordnet Zu jedem Knoten v wird sein Vorgänger vorg(v) festgehalten
Pseudocode des Dijkstra Algorithmus (1) S = {}; K = V; (2) dist(s) = 0; dist(v) = ¥ für alle v Î V \ {s}; (3) vorg(v) = -1 für alle v Î V; // Es sind noch keine kürzesten Wege bekannt. (4) while K ¹ {} do (5) wähle Knoten v aus K mit minimaler Distanz dist(v); (6) S = S È {v}; K = K \ {v}; (7) for jeden Nachbarknoten w Î K von v do (8) if dist(v) + l(v,w) < dist(w) then (9) dist(w) = dist(v) + l(v,w); // bisher bekannter kürzester Weg (10) vorg(w) = v; // von s nach w geht über v
Beispiel für die Anwendung des Dijkstraalgorithmus Kürzester Weg von einem Knoten s zu allen anderen Knoten (single source shortest paths problem) 13 13 1 4 1 4 5 5 b (1,2) + a (2,3) = 6 < b (1,5) + a (5,4) = 10 < b (1,5) + a (5,3) = 12 < a (1,4) = 13 1 1 5 a (1,2) = 2 < a (1,4) = 13 5 2 6 2 6 3 7 3 7 2 3 2 3 4 4 13 1 4 1 13 4 b (1,2) + a (2,5) = 5 < b (1,2) + a (2,3) = 6 < a (1,4) = 13 5 5 b (1,5) + a (5,4) = 10 < b (1,3) + a (3,4) = 12 < a (1,4) = 13 1 1 5 5 2 6 2 6 3 7 3 7 2 3 2 3 4 4
Zweitkürzeste Wege in einem Graphen Gesucht ist der zweitkürzeste Weg von s nach z Dijkstra ist dem Problem zweitkürzester Wege nicht gewachsen Lösung durch: Algorithmus von Pollack und Hoffman & Pavle (algorithmusverändernd) Algorithmus von Azevedo (graphverändernd)
Algorithmus von Pollack Dynamisches algorithmusveränderndes Verfahren Berechne den kürzesten Weg zwischen Start und Zielknoten (m Kanten) Entferne jeweils eine Kante des kürzesten Weges und berechne in dem neu entstandenen Graph wieder den kürzesten Weg zwischen Start und Zielknoten (m Berechnungen) Der kürzeste Weg dieser m Berechnungen ist der zweitkürzeste Weg zwischen Start und Zielknoten
Algorithmus von Pollack Kante 1 oder 2 wird weggelassen - kein kürzester Weg wird berechnet Kante 3 wird weggelassen - drittkürzester Weg wird berechnet Kante 4 – 8 wird weggelassen - zweitkürzester Weg wird berechnet
Der zweitkürzeste Weg von 1 nach 4 5 3 4 2 1 6 13 7 3 2 1 5 4 6 13 7 5 3 2 4 1 6 13 7 5 3 4 2 1 6 13 7
Der Algorithmus von Pollack findet keine Schleifen
Der Algorithmus von Hoffman & Pavley
Der zweitkürzeste Weg von 1 nach 4 3 2 1 5 4 6 13 7 5 3 2 4 1 6 13 7 5 3 4 2 1 6 13 7 5 3 4 2 1 6 13 7
Schleifenbeispiel für den Algorithmus von Hoffman & Pavley Die Kanten des kürzeste Wege Baumes zum Zielknoten hin sind violett Die kürzesten Wege von den Endknoten der Kanten 1 und 2 werden betrachtet Algorithmus erschafft zweitkürzesten Weg mit einem Zyklus
Schlingen am Anfang oder Ende ist. ster Weg zweitkürze ebenfalls der gefunden, der Weg auch wird so ist, rt) (undefinie daß ausgeht, davon man Wenn . 5 ) ( ster Weg. h automatisc und tigt berücksich dung Minimumbil bei , Damit wird denn t Eigenschaf die erfüllt Kante Die Betrachte zwischen Weg ste ist wieder Gesucht 3 2 1 , z, z , v s, v v w , z s u ,v (v z n i + ¹ = * d
Verfahrensvergleich Pollack Dynamisches Verfahren Berechne den kürzesten Weg w zwischen s und z Lasse eine Kante e von w weg. Berechne den kürzesten Weg im Graphen ohne die Kante e Minimiere über die so entstandenen kürzesten Wege Kürzester Weg ist gesperrt Nur schleifenfreie Wege werden gefunden Hoffman & Pavley Dynamisches Verfahren Berechne den kürzesten Weg w zwischen s und z Nimm jede Kante e deren Anfangsknoten ein Knoten von w ist und selbst keine Kante von w ist Berechne den kürzesten Weg vom Endknoten von e nach z und addiere den Weg nach s. Minimiere über die so entstandenen kürzesten Wege Zweitkürzester Weg wird als Variante des kürzesten Weges gesehen Auch Wege mit Schleifen werden gefunden
Algorithmus von Azevedo modifiziert von Schmid Statisches Verfahren (verändert nur den Graph nicht aber den kürzeste Wege- Algorithmus) Azevedo verwendet die Methode Pathdeletion (Wegeverbote).
Vorgehen bei Azevedo Erschaffe einen neuen Startknoten und einen neuen Zielknoten (später). Verdopple den kürzesten Weg ohne erste und letzte Kante bzw Knoten. (Wegeverdopplung) Weise der ersten Kante einen neuen Endknoten zu. (Umleitung) Ziehe alle Kanten über die der kürzeste Weg verlassen werden kann. (Verbindung mit dem Ausgangsgraphen)
Beispiel für den modifizierten Algorithmus von Azevedo Der kürzeste Weg ist nicht mehr begehbar (X). Der zweit und drittkürzeste Weg sind noch möglich (-- / --).
Der zweitkürzeste Weg (von 1 nach 4) 3 2 1 5 4 6 13 7 Der verdoppelte Weg ist blau. Die Verbindung mit dem Ausgangsgraphen ist grün. Die Kanten (2',5) und (5',4) werden nicht gezogen. Die Kante (1,2) wird zur Kante (1,2'). 5‘ 2‘ 1 3 7 2 5 4 6 13 5‘ 2‘ 1 3 7 2 5 4 6 13
Problem beim ersten Schritt Der Algorithmus von Azevedo kann in dieser Form einen zweitkürzesten Weg der Form: Schlinge - (alter) kürzester Weg oder (alter) kürzester Weg – Schlinge nicht erkennen. Lösung: Erschaffe einen neuen Startknoten und einen neuen Zielknoten. Verbinde den neuen Startknoten mit dem alten Startknoten durch eine Kante der Länge 0. Verbinde den alten Zielknoten mit dem neuen Zielknoten durch eine Kante der Länge 0.
Beispiel für einen erweiterten Graphen incl. ersten Schritt Der zweitkürzeste Weg (rot) beinhaltet die Schlinge beim Startknoten
Drittkürzeste Wege nach Pollack
k kürzeste Wege nach Pollack
Drittkürzeste Wege nach Azevedo
k - kürzeste Wege nach Azevedo
Der schlimmste Fall