Graphentheorie Rainer Schrader Zentrum für Angewandte Informatik Köln 25. Oktober 2007 1 / 20 2 / 20 Wir werden Optimierungsprobleme vom folgenden Typ betrachten: gegeben eine Menge X und eine Funktion f : X R Gliederung Bemerkungen zur Dualität bei nichtnegativen Entfernungen bei allgemeinen Entfernungen min f (x) x X In einigen Fällen existiert ein zweites Optimierungsproblem: gegeben eine Menge Y und eine Funktion g : Y R max g(y) y Y das erste Problem wird auch als das primale, das zweite als das duale Problem bezeichnet 3 / 20 4 / 20
min f (x) x X max g(y) y Y (1) oft ist die folgende Beziehung leicht einzusehen: für beliebige x X und y Y gilt: f (x) g(y) (schwache Dualität) wir werden Algorithmen betrachten, die folgendes berechnen: explizit ein x X (implizit) ein y Y, so dass gilt: Gliederung Bemerkungen zur Dualität bei nichtnegativen Entfernungen bei allgemeinen Entfernungen f (x) = g(y) (stake Dualität) aus der starken Dualität folgt die Optimalität das y liefert somit einen Beweis der Optimalität 5 / 20 6 / 20 gegeben sei ein gerichteter Graph G = (V, A) Entfernungen c(e) = c(u, v ) 0 auf den Kanten zwei ausgezeichnete Knoten s, t V. sei s = v 0, v 1,..., v k = t ein (s, t)-weg W werden in den Grundvorlesungen Informatik behandelt das Lösungsverfahren ist der wir werden im folgenden dieses Verfahren im Rahmen eine prima-dualen Ansatzes vorstellen die Länge von W ist die Summe der Entfernungen auf den durchlaufenen Kanten: Länge(W ) = c(u i, u i+1 ). gesucht ist ein kürzester (s, t)-weg 7 / 20 8 / 20
als X wählen wir die Menge aller (s, t)-wege in G f ordnet jedem Weg seine Länge zu eine Abbildung y : V R heißt (Knoten)-Potential ein Knotenpotential ordnet somit jedem Knoten eine reelle Zahl zu sei Y die Menge der Knotenpotentiale, für die für jede Kante e = (v, w ) E gilt: sei g(y) = y t y s y w y v c(v, w ) bzw. y w y v + c(v, w ) Lemma 1 (schwache Dualität für Wege und Knotenpotentiale) Für jeden Weg W und jedes zulässige Knotenpotential y gilt: Länge(W ) y t y s. sei s = v 0, v 1,..., v k = t ein (s, t)-weg W dann folgt: Länge(W ) = c(u i, u i+1 ) y i+1 y i = y k y 0 = y t y s 9 / 20 10 / 20 der Einfachheit halber setzen wir c(v, w ) = +, wenn (v, w ) / E der Algorithmus baut nun ein optimales Potential sukzessive folgendermaßen auf: (4) setze U U {v } (6) y w min{y w, y v + c(v, w )} Lemma 2 Der Dijkstra-Algortithmus erzeugt zulässige Potentiale. wir führen den Beweis in zwei Teilen 11 / 20 12 / 20
(i) wird u direkt vor v markiert, so gilt y u y v : in dem Schritt, in dem u markiert wird, gilt y u y v danach bleibt y v entweder gleich oder wird erniedrigt im zweiten Fall folgt aus dem Fortschreiben y v = y u + c(u, v ) y u damit steigen die y -Werte in der Markierungreihenfolge (ii) für e = (u, v ) E ist zu zeigen: y v y u + c(u, v ) wird u vor v markiert, so gilt diese Eigenschaft nach dem Fortschreiben danach bleibt y u konstant, y v kann nur noch verringert werden wird v vor u markiert, so gilt folgt aus (i): y v y u y u + c(u, v ) 13 / 20 14 / 20 für jeden Knoten v gilt: es existiert ein Knoten u, der y v zum letzten Mal fortschreibt Satz 3 Der Dijkstra-Algorithmus berechnet eine kürzesten Weg. damit gilt y v = y u + c(u, v ) (2) sei W der vorher berechnete Wege mit dieser Eigenschaft lässt sich leicht ein Weg von s nach t durch Zurückrechnen gewinnen: (1) setze v = t (2) bestimme einen Knoten u, der (2) erfüllt (3) falls u = s, stop (4) andernfalls setze v = u und gehe zu (2) per Konstruktion gilt für die jede Kante (u, v ) des Weges y v = y u + c(u, v ) somit: Länge(W ) = y t y s damit folgt die Behauptung aus der starken Dualität. 15 / 20 16 / 20
die Korrektheit des beruht auf der Annahme, dass die Kantenbewertungen nicht negativ sind auch für den Fall, dass wir negative Entfernungen zulassen, lassen sich berechnen, sofern sie überhaupt definiert sind d.h. sofern der Graph keine von s aus erreichbaren negativen Kreise enthält das folgende Bellman-Ford-Verfahren beruht auf dynamischer Programmierung sei dazu dist k (v ) die Länge eines kürzesten Weges von s nach v, der maximal k Kanten benutzt wobei dist k (v ) =, wenn kein solcher Weg existiert dann ist dist n 1 (t) die Länge eines kürzesten (s, t)-weges wir lassen das Verfahren aus Gründen, die weiter unten klar werden bis n laufen wir starten mit dist 0 (s) = 0 und dist 0 (v ) = für alle v V s für k = 1,..., n und v V s setzen wir dist k +1 (v ) = min{dist k (v ), dist k (u) + c(u, v ) : (u, v ) E }. 17 / 20 18 / 20 Dann ergibt sich unmittelbar: Satz 4 Sei D = (V, A) ein gerichteter Graph ohne negative Kreise. Dann berechnet der Algorithmus von Bellman-Ford in O(mn) Schritten. Der Bellman-Ford-Algorithmus kann auch benützt werden, um einen negativen Kreis zu entdecken: Satz 5 Sei D = (V, A) ein gerichteter Graph mit einer allgemeinen Kantenbewertung. Dann kann in O(mn) Schritten ein von s aus erreichbarer negativer Kreis gefunden werden, wenn ein solcher existiert. sei dist n 1 (u) dist n (u) für ein u V dann ist dist n (u) < dist n 1 (u) und es existiert ein (s, u)-pfad P der n Kanten benutzt daher muss P einen Kreis C enthalten wenn wir C aus P entfernen, erhalten wir einen (s, u)-pfad P der weniger als n Kanten benützt dann folgt l(p ) dist n 1 (u) > dist n (u) = l(p) und somit l(c) < 0. ist dist n 1 (u) = dist n (u) für alle u V, so kann kein negativer Kreis existieren, der von s aus erreicht werden kann. 19 / 20 20 / 20