Christian Sohler Paderborn, den 29. Juni 2007
u.v.a. Abgabe 9. Juli 2007
Ubungen zur Vorlesung ¨
Datenstrukturen und Algorithmen SS 2007
Blatt 10
AUFGABE 35:
Sei G = (V, E) ein gerichteter Graph, dessen Knoten Computer sind und dessen Kan- ten Kommunikationsverbindungen. F¨ur jede Kante (u, v) ∈ E ist ein Zuverl¨assigkeitswert r(u, v)∈[0,1] gegeben, welcher die Wahrscheinlichkeit angibt, dass die Kommunikationsver- bindung zwischen u und v nicht ausf¨allt. Wir nehmen an, dass diese Wahrscheinlichkeiten unabh¨angig voneinander sind.
Geben Sie einen effizienten Algorithmus an, der den zuverl¨assigsten Pfad von einem gegebenen Computer zu einem anderen gegebenen Computer findet. Dabei ist die Zuverl¨assigkeit auf einem Pfad definiert durch das Produkt der Zuverl¨assigkeitswerte der Kanten auf dem Pfad.
Zeigen Sie die Korrektheit Ihres Algorithmus.
AUFGABE 36:
Modifizieren Sie den Algorithmus von Bellman-Ford, so dass dieser in Laufzeit O(|V| · |E|) f¨ur jeden Knoten v ∈ V die Kosten eines k¨urzesten s-v-Pfades berechnet, wobei |E| > 0 gelten soll. Zeigen Sie, dass Ihr Algorithmus die gew¨unschte Laufzeit hat.
AUFGABE 37:
F¨uhren Sie den Floyd-Warshall Algorithmus auf dem angegebenen gerichteten Graphen G= (V, E) aus. Geben Sie dabei die MatrixD(k)an, die sich f¨ur jede Iteration der ¨außeren Schleife ergibt.
AUFGABE 38:
Wir betrachten das All-Pairs-Shortest-Path Problem f¨ur ungewichtete, ungerichtete Graphen G= (V, E). Die L¨ange eines k¨urzesten Pfades ist somit durch die Anzahl an Kanten auf dem Pfad gegeben. Sei A die Adjazenzmatrix des Graphen G, d.h. aij = 1 genau dann, wenn i und j benachbart sind. Sei gradA(j) der Grad des Knoten j in G. Beachten Sie, dass gradA(j) := Pn
k=1akj. Der folgende Algorithmus berechnet aus der Adjazenzmatrix A die Distanzmatrix D.
All-Pairs-Distance(A)
1: Z ←A·A
2: for i←1 to n do
3: for j ←1 to n do
4: if (i6=j) and ((aij = 1) or (zij >0)) then
5: bij ←1
6: else
7: bij ←0
8: if (bij = 1)∀i6=j then
9: return(2·B−A)
10: T ← All-Pairs-Distance(B)
11: X ←T ·A
12: for i←1 to n do
13: for j ←1 to n do
14: if xij ≥tij ·gradA(j)then
15: dij = 2·tij
16: else
17: dij = 2·tij −1
18: return D
Es soll nun gezeigt werden, dass dieser rekursive Algorithmus die korrekte Distanzmatrix berechnet. Nehmen Sie dazu an, dass zij >0 gilt genau dann, wenn es einen Pfad mit genau 2 Kanten zwischen i und j gibt. Des Weiteren ist B die Adjazenzmatrix eines Graphen G0, in dem f¨ur jeden Weg der L¨ange 2 in G eine Abk¨urzung eingef¨uhrt wurde.
Beweisen Sie die folgenden Behauptungen:
a) Wenn G0 ein vollst¨andiger Graph ist (d.h. bij = 1∀i6=j), dann gilt dij =
½ 1⇔aij = 1 2⇔aij = 0
¾
⇔dij = 2·bij −aij.
b) Bezeichnedij die Distanz zwischen den Knoteniundj inGundtij die Distanz zwischen ihnen in G0. Dann gilt:
dij gerade ⇒ dij = 2·tij, dij ungerade ⇒ dij = 2·tij−1.
c) Aus dij gerade folgt tik ≥ tij f¨ur alle Nachbarn k von j in G. Aus dij ungerade folgt tik ≤tij f¨ur alle Nachbarnkvonj und es gibt einen Nachbarnk vonj inGmittik < tij.
Nachdem die Behauptungen gezeigt worden sind, l¨asst sich die Korrektheit des Algorithmus wie folgt zeigen. Wenn man nun ¨uber alle Nachbarn k von j aufsummiert, erh¨alt man
dij gerade ⇔ X
k N achbarvon j
tik ≥grad(j)·tij
dij ungerade ⇔ X
k N achbarvon j
tik < grad(j)·tij
Beachten Sie, dass
X
k N achbarvon j
tik = Xn
k=1
tik·akj =xij.
Also kann man nach dem Berechnen der MatrixX aus den tij’s die gew¨unschtendij’s herlei- ten.