23.06.2013 Aufrufe

aktuelle Version des Vorlesungsskripts - ZIB

aktuelle Version des Vorlesungsskripts - ZIB

aktuelle Version des Vorlesungsskripts - ZIB

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!