aktuelle Version des Vorlesungsskripts - ZIB
aktuelle Version des Vorlesungsskripts - ZIB
aktuelle Version des Vorlesungsskripts - ZIB
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
5 Bäume und Wege<br />
DISTk(u) die Länge eines kürzesten (s, u)-Weges, der als innere Knoten nur die ersten<br />
k markierten Knoten benutzen darf. Gäbe es einen kürzeren gerichteten Weg, sagen<br />
wir P , von s nach u, so müsste dieser einen Bogen von einem markierten Knoten<br />
zu einem bisher nicht markierten Knoten enthalten. Sei (v, w) der erste derartige Bogen<br />
auf dem Weg P . Der Teilweg P <strong>des</strong> Weges P von s nach w ist also ein (s, w)-<br />
Weg, <strong>des</strong>sen innere Knoten markiert sind. Folglich gilt nach Induktionsvoraussetzung<br />
DISTk+1(w) ≤ c(P ). Aus DISTk+1(u) ≤ DISTk+1(w) und der Nichtnegativität der Bogenlängen<br />
folgt DISTk+1(u) ≤ c(P ) ≤ c(P ), ein Widerspruch.<br />
Es bleibt noch zu zeigen, dass für die derzeit unmarkierten Knoten v der Wert DISTk+1(v)<br />
die Länge eines kürzesten (s, v)-Weges ist, der nur markierte innere Knoten enthalten<br />
darf. Im Update-Schritt 3 wird offenbar die Länge eines (s, v)-Weges über markierte<br />
Knoten verschieden von u verglichen mit der Länge eines (s, v)-Weges über markierte<br />
Knoten, der als vorletzten Knoten den Knoten u enthält. Angenommen es gibt einen<br />
(s, v)-Weg P über markierte Knoten (inclusive u), <strong>des</strong>sen vorletzter Knoten w verschieden<br />
von u ist und <strong>des</strong>sen Länge geringer ist als die kürzeste Länge der oben betrachteten<br />
Wege. Da DISTk+1(w) die Länge eines kürzesten (s, w)-Weges ist und es einen solchen,<br />
sagen wir P ′ , gibt, der nur markierte Knoten enthält, die verschieden von u sind (w<br />
wurde vor u markiert), kann der (s, w)-Weg auf P nicht kürzer als P ′ sein, also ist P<br />
nicht kürzer als die Länge von P ′ ∪ {(w, v)}. Widerspruch. ✷<br />
In der Datenstruktur VOR merken wir uns zu jedem Knoten v seinen Vorgänger in<br />
einem kürzesten (s, v)-Weg. Einen kürzesten (s, v)-Weg erhält man also in umgekehrter<br />
Reihenfolge durch die Knotenfolge<br />
v, VOR(v), VOR(VOR(v)), . . . , VOR(VOR(. . . VOR(v) . . .)).<br />
Durch VOR ist offenbar eine Arboreszenz mit Wurzel s in D definiert. Daraus folgt sofort:<br />
(5.19) Satz. Sei D = (V, A) ein Digraph mit nichtnegativen Bogengewichten und s ∈ V ,<br />
dann gibt es eine Arboreszenz B mit Wurzel s, so dass für jeden Knoten v ∈ V , für den<br />
es einen (s, v)-Weg in D gibt, der (eindeutig bestimmte) gerichtete Weg in B von s nach<br />
v ein kürzester (s, v)-Weg ist. △<br />
An dieser Stelle sei darauf hingewiesen, dass der PRIM-Algorithmus (5.14) und der<br />
DIJKSTRA-Algorithmus (5.17) (im Wesentlichen) identische Algorithmen sind. Sie unterscheiden<br />
sich lediglich bezüglich einer Gewichtstransformation. In Schritt 3 von (5.14)<br />
wird min{c(e) | e ∈ δ(W )} gesucht, in Schritt 2 von (5.17) wird auch ein derartiges<br />
Minimum gesucht, jedoch sind vorher in Schritt 3 die Gewichte der Bögen <strong>des</strong> Schnittes<br />
modifiziert worden.<br />
Den DIJKSTRA-Algorithmus kann man ohne Schwierigkeiten so implementieren, dass<br />
seine Laufzeit O(|V | 2 ) beträgt. Bei Digraphen mit geringer Bogenzahl kann die Laufzeit<br />
durch Benutzung spezieller Datenstrukturen beschleunigt werden, siehe hierzu z.B. Ahuja<br />
et al. (1993) oder Schrijver (2003).<br />
94