Problem (Hamiltonkreis) Problem (Gerichteter Hamiltonkreis)

Werbung
Technische Universität München
Zentrum Mathematik
Prof. Dr. P. Gritzmann, Dipl.-Inf. Dipl.-Math. S. Borgwardt, Dr. M. Ritter
Optimierung 2, WS 2008/09
Übungsblatt 12
Aufgabe 12.1
Betrachten Sie die folgenden Probleme:
Hamiltonkreis)
Problem (
Ein Graph
Gegeben:
Auftrag:
G = (V, E).
Entscheide, ob
G
einen Hamiltonkreis besitzt.
Gerichteter Hamiltonkreis)
Problem (
Ein Digraph
Gegeben:
Auftrag:
G = (V, E).
Entscheide, ob
G
einen (gerichteten) Hamiltonkreis besitzt.
a) Zeigen Sie: Das Problem Hamiltonkreis kann polynomiell auf das Problem Gerich-
teter Hamiltonkreis reduziert werden.
b) Was sagen Sie zu folgender Aussage: Hat man eine Instanz
G = (V, E) von Gerichte-
ter Hamiltonkreis gegeben, so deniert man einfach einen ungerichteten Graphen
G0 = (V, E 0 )
durch
E 0 := {{u, v} : (u, v) ∈ E}.
Damit ist das Problem auf Hamilton-
kreis reduziert.
c) Zeigen Sie: Das Problem Gerichteter Hamiltonkreis kann polynomiell auf das
Problem Hamiltonkreis reduziert werden.
Lösung zu Aufgabe 12.1
a) Zu einer Instanz
(V, E ∗ ) durch
G = (V, E) von Hamiltonkreis denieren wir einen Digraphen G∗ :=
E ∗ :=
[
{(u, v), (v, u)} .
{u,v}∈E
Besitzt
G∗
einen gerichteten Hamiltonkreis, so entspricht diesem natürlich auch ein Ha-
Umgekehrt gibt es zu jedem Hamiltonkreis in G aber auch einen korG∗ (genau genommen sogar zwei), wenn man sich auf
∗
eine Durchlaufrichtung festlegt. Also gilt: G besitzt genau dann einen Hamiltonkreis,
miltonkreis in
G.
respondierenden Hamiltonkreis in
wenn
G
einen besitzt, damit hat man die gewünschte polynomielle Reduktion.
b) Die Aussage ist natürlich Unsinn, wie folgendes Beispiel zeigt:
1
2
3
1
4
Oenbar bestitzt der Digraph keinen gerichteten Hamiltonkreis, seine ungerichtete Version hat aber natürlich einen Hamiltonkreis.
c) Sei
G = (V, E) eine Instanz von Gerichteter
Hamiltonkreis, dann nehmen wir fol-
gende Transformation auf einen (ungerichteten) Graphen
V 0 :=
[
v + , v, v −
G0 = (V 0 , E 0 ) vor (vgl. Skizze):
v∈V
!
E 0 := E10 ∪ E20 :=
u− , v
+
: (u, v) ∈ E ∪
[ v + , v , v, v −
v∈V
v
v−
v
v+
Wir zeigen, dass diese Transformation die gesuchte Reduktion darstellt. Dass die Transformation mit polynomiell beschränktem Aufwand durchführbar ist, ergibt sich aus der
Tatsache, dass der neue Graph
3n
Knoten und
m + 2n
Kanten besitzt, seine Gröÿe ist
also polynomiell beschränkt in der Gröÿe des Digraphen
Bleibt zu zeigen, dass
G0
G.
genau dann einen Hamiltonkreis enthält, wenn
richteten Hamiltonkreis enthält. Die eine Richtung ist klar: Falls
G
G
einen ge-
einen gerichteten
G0 , wenn
Hamiltonweg enthält, ergibt sich daraus natürlich auch ein Hamiltonweg in
+
−
man jeden Knoten x durch die Knotenfolge x , x, x ersetzt.
Für die Umkehrung setzen wir voraus, dass
G0
einen Hamiltonkreis enthält. Dieser Kreis
enthält dann natürlich auch alle Mittelknoten, und mit einem Mittelknoten x sind auch
+
−
die beiden Kanten {x , x} und {x, x } im Hamiltonkreis enthalten, und zwar unmittelbar hintereinander (anders ist
x
ja nicht zu erreichen). Der Hamiltonkreis ist also eine
+
−
−
+
Aneinanderreihung von Knotentripeln x , x, x
oder x , x, x . Aus der Konstruktion
2
von
G0
folgt aber, dass diese Tripel alle einheitlicher Reihenfolge durchlaufen werden
müssen, d.h. auf einen Minusknoten folgt immer ein Plusknoten oder umgekehrt −
+
von einem x -Knoten kommt man ja nur zu einem y -Knoten und umgekehrt. Ein solcher Hamiltonkreis entspricht aber einem gerichteten Hamiltonkreis in
+
−
in der Reihenfolge x , x, x für alle Knoten durchläuft.
G, wenn man ihn
Aufgabe 12.2
Wir zeigen, dass der Floyd-Warshall Algorithmus auf einem Graphen
G = (V, E)
mit
n = |V |
als Beispiel für dynamische Optimierung verstanden werden kann. Dazu konstruieren wir den
zugehörigen Schichtgraphen.
Dabei benutzen wir jeweils eine Schicht von Knoten für jeden Schritt des Algorithmus, also
(k)
für jede Matrix DG , k = 0, . . . , n, und einen Knoten pro Schicht für jeden Eintrag von
(k)
(k)
DG = (δij )i,j∈[n] .
a) Skizzieren Sie die Knotenmenge des Schichtgraphen und beschreiben Sie die Bedeutung
der einzelnen Knoten. Wieviele Knoten gibt es in Ihrem Schichtgraphen?
b) Beschreiben Sie die Kantenmenge Ihres Schichtgraphen und die dazugehörige Stufenkostenfunktion. Was stellen Sie für Ihre Stufenkostenfunktion fest?
c) Bestimmen Sie eine möglichst scharfe Laufzeitschranke für Ihren Algorithmus.
Lösung zu Aufgabe 12.2
a) Neben einem Startknoten
s
benutzen wir für jeden der
n
Schritte (und für die urprüng-
liche Distanzmatrix) des Floyd-Warshall-Algorithmus eine Schicht von Knoten, die den
(i, j)
k -ten Matrix repräsentiert die Länge eines kürzesten vi , vj -Weges in dem gegebenen
Graphen, der nur Knoten v1 , ..., vk als Zwischenknoten benutzt, für k = 0 entspricht er
dem Wert der Distanzmatrix an der Stelle (i, j). Den entsprechenden Knoten in unserem
Schichtgraphen (der sich in Schicht k bendet) indizieren wir als vi,j,k .
Matrix-Einträgen des entsprechenden Schrittes entsprechen. Der Eintrag an Stelle
in der
Insgesamt haben wir damit
s und vi,j,k ∀i, j ∈ {1, ..., n}, k ∈ {0, ..., n}, also n2 · (n + 1) + 1
Knoten.
vi,j,0 unseres Graphen soll jeweils die Kantenlängen zwischen
s mit einer Kante mit jedem dieser
Stufenkostenfunktion φ((s, vi,j,0 )) = w((vi , vj )), falls (vi , vj ) ∈
b) Die erste Schicht der Knoten
Knoten
vi
und
vj
angeben. Dazu verbinden wir
Knoten, und benutzen als
E
und
φ((s, vi,j,1 )) = ∞
sonst.
Damit enthalte die Schicht
noten aus
v1 , ...vk .
k
die kürzesten Wege zwischen Knoten allein mit Zwischenk-
Die Kanten zu Schicht
Da ein kürzester Weg über Knoten
Knoten
0,
vk+1
k+1
v1 , ..., vk+1
entstehen folgendermaÿen:
zwischen zwei Knoten möglicherweise den
(vi,j,k , vi,j,k+1 ) mit φ((vi,j,k , vi,j,k+1 )) =
vi,j,k+1 übernommen werden kann.
gar nicht benutzt, haben wir Kanten
so dass das Label von Knoten
vi,j,k
direkt für
3
vk+1 auf dem Weg entstehen durch den Dreiecksoperator mögvi , ..., vk+1 , ..., vj . Dessen Länge setzt sich natürlich zusammen aus der Länge des Weges vi , ..., vk+1 und des Weges vk+1 , ..., vj . Dementsprechend
fügen wir dem Schichtgraphen Kanten von vi,k+1,k zu vi,j,k+1 hinzu mit φ((vi,k+1,k , vi,j,k+1 )) =
δ(vk+1,j,k ), wobei δ(vk+1,j,k ) dem Label des Knotens vk+1,j,k entspricht, also der Länge
eines kürzesten vk+1 , vj -Weges über Knoten v1 , ..., vk . Da δ(vi,k+1,k ) der Länge eines kürzesten vi , vk+1 -Weges über Knoten v1 , ..., vk entspricht, wird das Label des Knotens vi,j,k+1
genau mit der Länge eines kürzesten vi , vj -Weges über v1 , ..., vk+1 belegt, wenn wir das
Durch das Erlauben von
licherweise
vi , vj -Wege
der Form
Minimum der angebotenen Wege zum Knoten auswählen.
Diese Stufenkostenfunktion lässt sich nicht geschlossen angeben: Mit der Denition
φ((vi,k+1,k , vi,j,k+1 )) = δ(vk+1,j,k )
kennen wir die Kantengewichte zur Schicht
nachdem wir die Knotenlabels der Schicht
k
k+1
erst,
berechnet haben. Für unseren Algorithmus
ist dies unproblematisch.
c) Wir bestimmen eine Laufzeitschranke für unseren Algorithmus durch die Anzahl der
3
Knoten und Kanten in unserem Graphen. Nach Aufgabe a) haben wir n +n+1 Knoten.
2
Von s laufen n Kanten zu den Knoten der ersten Schicht. Danach haben wir n weitere
Übergänge von einer Schicht zur nächsten. In diesen gibt es für jeden Knoten
Kante zu
vi,j,k
eine
vi,j,k+1 und für n weitere Knoten vi,k+1,k (i ∈ {1, ..., n}) jeweils n weitere Kanten
vi,j,k+1 (j ∈ {1, ..., n}). Wir haben also n2 +n2 = 2n2 Kanten für einen solchen
zu Knoten
Schichtübergang.
3
Zusammen haben wir n + n + 1 Knoten und
3
in O(n ). (Vgl. Vorlesung)
n2 + n · (2n2 ) = n2 + 2n3
Kanten, sind also
Aufgabe 12.3 Hausaufgabe
a) Erweitern Sie den Euklidischen Algorithmus (6.1.9 der Vorlesung) zur Bestimmung des
gröÿten gemeinsamen Teilers zweier Zahlen
a, b ∈ N
derart, dass Faktoren
s, t ∈ Z
bestimmt werden, so dass
ggT (a, b) = s · a + t · b.
Begründen Sie die Korrektheit Ihres Algorithmus.
b) Benutzen Sie Ihren Algorithmus aus Teilaufgabe
a),
um eine ganzzahlige Lösung der
folgenden diophantischen Gleichung zu bestimmen:
6 · x1 + 12 · x2 + 14 · x3 = 16
c) Bestimmen Sie alle ganzzahligen Lösungen der Gleichung aus Teilaufgabe
Vorlesung. (Vgl. Beispiel
7.1.9
der Vorlesung.)
Lösung zu Aufgabe 12.3
4
b)
analog zur
Algorithmus 1 :
Input : a, b ∈ N
Output : s, t ∈ Z
Erweiterter Euklidischer Algorithmus
mit
1 Setze k = 0; r0 = a, r1
2 while rk+1 6= 0 do
3
k := k + 1
4
5
6
7
ggT (a, b) = s · a + t · b
= b; s0 = 1, s1 = 0; t0 = 0, t1 = 1.
c
qk := b rk−1
rk
rk+1 := rk−1 − qk · rk
sk+1 := sk−1 − qk · sk
tk+1 := tk−1 − qk · tk
8 end
9 return:
s = sk , t = tk
rk konstruiert, die als ggT von a
und b in Frage kommen. Sobald rk+1 = rk−1 − qk · rk = 0 brechen wir ab, da wir dadurch
rk−1
∈ N und wir hiermit feststellen, dass ggT (a, b) = ggT (rk−1 , rk ) = rk
wissen, dass
rk
ist. (Vgl. Lemma 6.1.10).
a) Analog zu Algorithmus
6.1.9
wird eine Folge fallender
Mit der gewählten Initialisierung gilt
r0 = a = 1 · a + 0 · b = s0 · a + t0 · b
r1 = b = 0 · a + 1 · b = s1 · a + t1 · b
sk und tk erfolgen nun analog zu den Belegungen der rk , so dass
rk = sk · a + tk · b gilt. Da am Ende des Algorithmus ggT (a, b) = rk gilt, arbeitet
Die Belegungen der
stets
der Algorithmus korrekt.
b) Nach Lemma
7.1.6 und Bemerkung 7.1.7 berechnen wir (iterativ) den ggT
der drei Koef-
zienten. (Natürlich kann man ihn in diesem Beispiel einfach ablesen.) Hierzu benutzen
wir unseren erweiterten Euklidischen Algorithmus, so dass wir dabei die Lösung der
Gleichung mitbestimmen.
ggT (6, 12) = 6 = 1 · 6 + 0 · 12 durch Ablesen oder
r0 = 6, s0 = 1, t0 = 0
r1 = 12, s1 = 0, t1 = 1
r2 = 6 − 0 · 12 = 6, s2 = 1, t2 = 0
r3 = 12 − 2 · 6 = 0, s3 = 0 − 2 · 1 = −2, t3 = 1 − 2 · 0 = 1
Also: s = s2 = 1, t = t2 = 0
Schritt 1:
wie folgt
ggT (6, 14) = 2 = −2 · 6 + 1 · 14 durch Ablesen oder
= 6, s0 = 1, t0 = 0
= 14, s1 = 0, t1 = 1
= 6 − 0 · 14 = 6, s2 = 1, t2 = 0
= 14 − 2 · 6 = 2, s3 = 0 − 2 · 1 = −2, t3 = 1 − 2 · 0 = 1
= 6 − 3 · 2 = 0, s4 = 1 − 3 · (−2), t4 = 0 − 3 · 1 = −3
Also: s = s3 = −2, t = t3 = 1
Schritt 2:
r0
r1
r2
r3
r4
5
wie folgt
Schritt 3: Zusammen ergibt sich
ggT (6, 12, 14) = 2 = −2·ggT (6, 12)+1·14 = −2(1·6+0·12)+1·14 = −2·6+0·12+1·14
Da
16 = 2 · 8
erhalten wir als Lösung
x1 = −2 · 8 = −16, x2 = 0, x3 = 1 · 8 = 8.
ggT -Berechnungen wie folgt


1 −2 0
(6, 12, 14) 0 1 0 = (6, 0, 14)
0 0 1


1 0 −2
(6, 0, 14) 0 1 0  = (6, 0, 2)
0 0 1


1 0 0
(6, 0, 2)  0 1 0 = (0, 0, 2)
−3 0 1
c) In Matrixschreibweise sehen unsere
aus:
Wir erhalten eine Matrix



 

1 −2 0
1 0 −2
1 0 0
7 −2 −2
1
0
C = 0 1 0 0 1 0   0 1 0 =  0
0 0 1
0 0 1
−3 0 1
−3 0
1
(6, 12, 14)C = (0, 0, 2). Damit ist 6 · x1 + 12 · x2 + 14 · x3 = 2β 0 lösbar für β 0 ∈ Z,
0
T
−1
also insbesondere für 2β = 16. C ist regulär, also gilt für y := (y1 , y2 , y3 ) := C
x
mit
16 = (6, 12, 14)x = (6, 12, 14)Cy = (0, 0, 2)y = 2y3
Damit ist y3
(−2, 1, 0)T y2
= 8 und wir erhalten alle Lösungen in der Form x = Cy = (7, 0, −3)T y1 +
+ (−2, 0, 1)T · 8, wobei y1 , y2 ∈ Z beliebig sind.
6
Herunterladen