Formale Methoden der Informatik WS 2010/2011 28. Aufgabe (6

Werbung
Formale Methoden der Informatik WS 2010/2011
Lehrstuhl für Datenbanken und Künstliche Intelligenz
Prof. Dr. Dr. F. J. Radermacher • H. Ünver • T. Rehfeld • J. Dollinger
6. Aufgabenblatt
Besprechung in den Tutorien vom 08.12.2010 (ab Übungstermin)
bis 15.12.2010 (bis Übungstermin)
28. Aufgabe (6 Punkte) Verständnisfragen:
a) Was ist ein Euler-Kreis, und was ist eine Euler-Tour?
Euler-Kreis:
Ein Weg durch einen Graphen, der alle Kanten genau einmal besucht und bei dem
Anfangs- und Endknoten übereinstimmen.
Euler-Tour:
Wie Euler-Kreis, nur müssen Anfangs- und Endknoten hier nicht übereinstimmen.
b) Wann existiert zu einem Graphen ein Euler-Kreis und wann eine Euler-Tour?
Euler-Kreis:
Wenn alle Knotengrade gerade sind.
Euler-Tour:
Wenn die Knotengrade maximal zweier Knoten ungerade sind.
c) Was ist ein Hamilton-Kreis?
Ein Weg durch einen Graphen, der alle Knoten genau einmal besucht und bei dem
Anfangs- und Endknoten übereinstimmen.
d) Was ist eine Rundreise?
Ein Weg in einem Graphen, der von einem Startknoten ausgehend über verschiedene
andere Knoten (oft auch über alle anderen Knoten) wieder zum Startknoten führt.
(Im Grunde, (meist) ein Hamiltonkreis durch einen Graphen.)
e) Ist der Dijkstra-Algorithmus geeignet, Rundreiseprobleme zu lösen?
Nein!
Der Dijkstra-Algorithmus sucht den kürzesten Weg zwischen zwei Knoten in einem
Graphen (ggf. zwischen einem Anfangsknoten und allen anderen Knoten).
Eine Rundreise beschreibt einen Kreis in einem Graphen, d.h. Anfangs- und Endknoten
sind derselbe Knoten.
Beim Traveling-Salesman-Problem – einem typischen Rundreiseproblem (gesucht ist die
kürzeste Rundreise, die alle Knoten genau einmal besucht) – funktioniert der DijkstraAlgorithmus gerade nicht . Ermittelt wird nur der kürzeste Weg zwischen zwei (festen)
Knoten – nicht der Kreisschluss.
f) Was ist eine Heuristik?
Eine Strategie, die zwar kein exaktes, jodoch zumindest ein gutes“ Ergebnis zu einem
”
Problem liefert.
Heuristiken werden vor allem eingesetzt, wenn die exakte Bestimmung eines Problems
(ab einer bestimmten Datenmenge) einen sehr hohen Aufwand bedeutet.
g) Was ist ein Transportnetz?
Ein Graph mit gewichteten Kanten, die Kapazitäten darstellen.
h) Was ist ein Fluss?
Ein Fluss durch eine Kante ist eine Zahl, die kleiner oder gleich der Kapazität dieser
Kante ist, sowie eine Angabe über die Richtung des Flusses.
Ein Fluss durch den Graphen ist die Summe der Flüsse durch die Kanten eines beliebigen Schnitts.
Anmerkung: Die Gleichheit der Flüsse durch alle Schnitte wird durch das Kirchoff’sche
Gesetz gewährleistet.
i) Wann ist ein Fluss maximal?
Wenn es keinen weiteren flusserhöhenden Weg mehr von der Quelle zur Senke gibt.
j) Was ist ein Schnitt?
(Genau) die Menge von Kanten, durch deren Entfernung der Graph in zwei Zusammenhangskomponenten zerfällt.
k) Was ist ein Matching?
Ein Menge von Kanten, so dass keine zwei Kanten einen gemeinsamen Knoten haben.
l) Was ist ein perfektes Matching?
Ein Matching, bei dem alle Knoten des Graphen beteiligt sind.
29. Aufgabe (6 Punkte) Kürzester Weg:
Bestimmen Sie den kürzesten Weg im folgenden Graphen mit Hilfe des Dijkstra Algorithmus:
a) vom Knoten s zum Knoten t,
b
3
7
a
t
4
2
6
2
7
d
14
10
s
c
4
7
3
7
e
L
K
∅
(a, ∞), (b, ∞), (c, ∞), (d, ∞), (e, ∞), (s, 0) , (t, ∞)
p(s)=−
(s, 0)
(s, 0), (c, 4)
(s, 0), (c, 4), (a, 6)
(s, 0), (c, 4), (a, 6), (e, 7)
(s, 0), (c, 4), (a, 6), (e, 7), (b, 9)
(s, 0), (c, 4), (a, 6), (e, 7), (b, 9), (d, 13)
(s, 0), (c, 4), (a, 6), (e, 7), (b, 9), (d, 13), (t, 15)
∅
(a, 7), (b, ∞), (c, 4) , (d, 14), (e, 7), (t, ∞)
p(a)=s
p(c)=s p(d)=s p(e)=s
(a, 6) , (b, 10), (d, 14), (e, 7), (t, ∞)
p(a)=c p(b)=c
(b, 9), (d, 14), (e, 7), (t, ∞)
p(b)=a
(b, 9), (d, 14), (t, ∞)
(d, 13), (t, 16)
p(d)=b p(t)=b
(t, 15)
p(t)=d
Legende:
• Die Angaben p(x) = y unter den neu berechneten Knoten geben an, (ob in diesem
Schritt ein neuer Vorgänger und) welcher Vorgänger für eine Entfernungsänderung des
Knotens in diesem Schritt verantwortlich ist.
• Fettgedruckte Knoten aus der K-Liste sind die gegenwärtig kleinsten und werden in
die L-Liste übernommen.
• Unterstrichene Knoten aus der K-Liste sind die von den fettgedruckten aus (und
damit in die L-Liste übernommenen und damit vom nächsten Schritt ab) erreichbaren
Knoten.
(Nur diese Knoten brauchen im nächsten Schritt neu untersucht werden. Die restlichen
verändern sich unter Garantie im nächsten Schritt nicht und können daher einfach
abgeschrieben werden.)
Alternative Schreibweise:
m(s) := 0
pred(s) := −
v0 := s
K := {a, c, d, e}
m(a) := 7
pred(s) := s
m(c) := 4
pred(c) := s
m(d) := 14
pred(d) := s
m(e) := 7
pred(e) := s
v0 := c
K := {a, b, d, e}
m(a) := m(c) + w(c, a) = 4 + 2 = 6
pred(a) := c
m(b) := m(c) + w(c, b) = 4 + 6 = 10
pred(b) := c
m(d) := m(c) + w(c, d) = 4 + 10 = 14
keine Verbesserung (war schon 14)
m(e) := m(c) + w(c, e) = 4 + 3 = 7
keine Verbesserung (war schon 7)
v0 := a
K := {b}
m(b) := m(a) + w(a, b) = 6 + 3 = 9
pred(b) := a
v0 := e
K := {d}
m(d) := m(e) + w(e, d) = 7 + 7 = 14
keine Verbesserung (war schon 14)
v0 := b
K := {d, t}
m(d) := m(b) + w(b, d) = 9 + 4 = 13
pred(d) := b
m(t) := m(b) + w(b, t) = 9 + 7 = 16
pred(t) := b
v0 := d
K := {t}
m(t) := m(d) + w(d, t) = 13 + 2 = 15
pred(t) := d
v0 := t
K := {}
Kürzester Weg:
Die Angaben von p(x) (für verschiedene x) können in einer Tabelle zusammengefasst werden, in der für jedes x, das angegeben wird, ein Wert eingetragen (und ggf. auch wieder
überschrieben, d.h. abgeändert) wird.
Für den vorliegenden Graphen ergibt sich beim ablaufen des Dijkstra-Algorithmus die folgende Tabelle:
Vorgänger
sc
ca
s
sb
s
−
bd
pred(x)
pred(a)
pred(b)
pred(c)
pred(d)
pred(e)
pred(s)
pred(t)
Durch sukzessives Einsetzen erhält man (von hinten angefangen) den kürzesten Weg:
Zielknoten
pred(t)
pred(d)
pred(b)
pred(a)
pred(c)
pred(s)
=
=
=
=
=
=
=
t
d
b
a
c
s
− (Startknoten)
Damit ergibt sich der folgende kürzeste Weg (von s nach t):
s→c→a→b→d→t
Lösung:
b
3
7
a
t
4
2
6
2
7
d
14
10
s
c
4
7
3
7
e
b) und von Augsburg nach Hanau. (Bonus)
20
Frankfurt
am Main
Hanau
HA
110
F
Würzburg
WÜ
90
120
Nürnberg
Mannheim
MA
N
140
130
AA
Aalen
115
Stuttgart
S
75
90
80
UL
Ulm
A
80
Augsburg
M
München
L
∅
K
(A, 0)
(A, 0)
(M, 80), (UL, 80)
-"-(UL, 80)
(AA, 155)
(S, 170)
-"-
(N, 195)
-"-
A
(AA, 155), (M, 80), (S, 170)
UL
UL
(AA, 155), (N, 195), (S, 170)
-"- (M, 80)
-"-
A
(WÜ , 295)
-"-"-"-"-
(MA, 300)
(F, 390)
M
(N, 195), (S, 170), (WÜ , 295)
AA
(MA, 300), (N, 195), (WÜ , 295)
S
(MA, 300), (WÜ , 295
//// )
315
(HA, 405), (MA, 300)
WÜ
(F, 390), (HA, 405)
MA
)
(HA, 405
///
/
410
(HA, 405) ∅
Legende:
• Nicht-erreichbare Knoten (bisher durch die Form (x, ∞) gekennzeichnet) wurden diesmal weggelassen.
• Die Angaben unter den neu berechneten Knoten beziehen sich auf den unmittelbaren
Vorgänger, der zur Neuberechnung der Entfernung geführt hat. Diesmal wurde nur noch
der Name des Vorgängerknotens angegeben (also kein pred(x) oder p(x) mehr).
• Ergab eine Neuberechnung eine größere Entfernung als die bisherige, so wurde dieser
nicht-übernomme Wert in ausge-X-ter
//////////////// Form darunter geschrieben (hätte weggelassen
werden können).
• Fettgedruckte Knoten aus der K-Liste waren in der Zeile die gegenwärtig kleinsten
und wurden in die L-Liste übernommen.
Alternative Schreibweise:
m(A) := 0
pred(A) := −
v0 := A
K := {UL, M }
m(UL) := 80
pred(UL) := A
m(M ) := 80
pred(M ) := A
v0 := M
K := {N }
m(N ) := m(M ) + w(M, N ) = 80 + 115 = 195
pred(N ) := M
v0 := UL
K := {AA, S}
m(AA) := m(UL) + w(UL, AA) = 80 + 75 = 155
pred(AA) := UL
m(S) := m(UL) + w(UL, S) = 80 + 90 = 170
pred(S) := UL
v0 := AA
K := WÜ
m(WÜ) := m(AA) + w(AA, WÜ ) = 155 + 140 = 295
pred(WÜ) := AA
v0 := S
K := {MA}
m(MA) := m(S) + w(S, MA) = 170 + 130 = 300
pred(MA) := S
v0 := N
K := WÜ
m(WÜ) := m(N ) + w(N, WÜ) = 195 + 120 = 315
keine Verbesserung (bisher 295)
v0 := WÜ
K := {HA}
m(HA) := m(WÜ ) + w(WÜ , HA) = 295 + 110 = 405
pred(HA) := WÜ
v0 := MA
K := {F }
m(F ) := m(MA) + w(MA, F ) = 300 + 90 = 390
pred(F ) := MA
v0 := F
K := {HA}
m(HA) := m(F ) + w(F, HA) = 390 + 20 = 410
keine Verbesserung (bisher 405)
v0 := HA
K := {}
Kürzester Weg:
Die Angaben der Vorgänger verschiedener Knoten x können in einer Tabelle zusammengefasst werden, in der für jedes x, das angegeben wird, ein Wert eingetragen (und ggf. auch
wieder überschrieben, d.h. abgeändert) wird.
Für den vorliegenden Graphen ergibt sich beim ablaufen des Dijkstra-Algorithmus die folgende Tabelle diesmal in der Reihenfolge des ersten Auftretens – also nicht umsortiert:
Vorgänger
−
A
A
M
UL
UL
AA
S
WÜ
MA
pred(x)
pred(A)
pred(UL)
pred(M )
pred(N )
pred(AA)
pred(S)
pred(WÜ )
pred(MA)
pred(HA)
pred(F )
Durch sukzessives Einsetzen erhält man (von hinten angefangen) den kürzesten Weg:
(Ziel) pred(HA)
pred(WÜ )
pred(AA)
pred(UL)
pred(A)
→
→
→
→
→
WÜ
AA
UL
A
− (Start)
Damit ergibt sich der folgende kürzeste Weg (von Augburg (A) nach Hanau (HA)):
A → UL → AA → WÜ → HA
Lösung:
20
Frankfurt
am Main
Hanau
HA
110
F
Würzburg
WÜ
90
120
Nürnberg
Mannheim
MA
N
140
130
AA
Aalen
115
Stuttgart
S
75
90
UL
80
Ulm
A
Augsburg
80
M
München
30. Aufgabe (1 Punkt) Hamiltonkreis:
Geben Sie ein Beispiel für einen Graphen an ohne Hamiltonkreis, bei dem alle Knotengrade ≥ 2
sind.
Beispielsweise:
....
.........
..... ........
.... ......
.
.....
....
..
...
... .....
..
.
...............
.
.
.
. ..........
...
....
...
...
.
....
.
..
...
....
....
....
...
....
....
... ......... ......
.
.... .......
.....
..
..... .....
... ......... ......
.
.
....
..
.
.
.
...
..
....
....
...
....
....
...
.
.
...
.
.
.
.... .........
.
.
.
.
.
.
.
.
.
.
.
.. ......
.... ......
..
.....
.
.....
.
...
.
..... ......
................
.......
1
5
2
4
3
Gleichgültig, wie man läuft, für eine Kreis-Tour muss man auf jeden Fall zweimal über den
Knoten 2 laufen – und das ist bei einer Hamiltontour nicht erlaubt.
31. Aufgabe (4 Punkte) Eulerkreis:
Gegeben sei der folgende Graph:
a) Kann man diesen Graphen mit Kanten (Mehrfachkanten nicht erlaubt) so erweitern, dass er
mit einem Zug gezeichnet werden kann?
In einem Zug zeichnen ist äquivalent mit: Der Graph hat einen Eulerpfad (d.h. es gibt
höchstens zwei Knoten mit ungeradem Grad).
Durch Hinzufügen von Kanten zwischen den Knoten mit ungeradem Grad werden die
Grade dieser Knoten gerade gemacht. Dies führt man so oft durch, bis nur noch zwei
Knoten mit ungeradem Grad vorhanden sind.
Mögliche Kanten: {{A, N } , {E, P } , {G, F }}.
b) Kann man ihn auch so erweitern, dass Start- und Endknoten des Zugs gleich sind?
{{A, G} , {C, E} , {M, F } , {N, P }}
c) Gibt es Graphen (mit mehr als zwei Knoten), die man durch Hinzufügen von Kanten nicht
so ergänzen kann, dass sie mit einem Zug gezeichnet werden können?
Ja, z.B. der K4 (K4 ist ein Graph mit 4 Knoten, bei dem jeder mit jedem verbunden
ist).
d) Gibt es Graphen (mit mehr als zwei Knoten), die man durch Hinzufügen von Kanten nicht
so ergänzen kann, dass sie mit einem Zug gezeichnet werden können, so dass Start- und
Endknoten gleich sind?
Ja, z.B. der K4 , bei dem eine Kante entfernt wurde (wenn Mehrfachkanten nicht erlaubt
sind).
32. Aufgabe (6 Punkte) Algorithmus von Ford / Fulkerson:
3
.......
................
.... .......
..
.. ...
.....
.
...........
.
... .....
.........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.................................. ................
...... ... ......
.
.
...
.
.
.
.
.
....
..
..
.... ................
.
.
.
.
.
.
........
...
...
...
...
.........
....
....
....
........
....
...
.
...
.
.
.
.
.
.........
...
...
...
.........
....
.....
....
....
........ . ..........
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
............... ....
.
.. ...
. ...
. ....
...
..
.....
.....
..
.
...........
......
.
.
.
............
.
.
.
...
.
.
.
.
.
...
.... ...
.... .....
.................
..............................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...... ...
...
.....
.
.
... ... ......
.
.
.
.
.
.
....
.
.
.
.
....
..
..
........
...
....
....
....
....
.........
....
....
....
........
...
...
...
.........
....
...
....
....
.... ................
....
.
.
.
.
.
.
.
.
.
...... .. ......
............................ ...............
............ ...........
........
.
..
.. ...
.....
.
...........
..
... .....
.................
...........
a
10
Quelle
1
s
7
2
6
3
c
4
4
d
t
Senke
1
2
b
6
f
1
e
7
6
a) Bestimmen Sie mit dem Algorithmus von Ford und Fulkerson für den gegebenen Graphen
einen maximalen Fluss von der Quelle zur Senke.
Beispielhafte Berechnung der Erweiterungspfade und der entstehenden Flusserhöhung:
Erweiterungspfad
Restkap. / Flusserh.
s-a-d-t:
s-a:
a-d:
d-t:
10 − 0
3−0
7−0
s-b-e-t:
s-b:
b-e:
e-t:
4−0
7−0
6−0
=
=
=
min:
4
7
6
4
s-c-e-t:
s-c:
c-e:
e-t:
1−0
2−0
6−4
=
=
=
min:
1
2
2
1
s-a-c-e-t:
s-a:
a-c:
c-e:
e-t:
10 − 3
6−0
2−1
6−5
=
=
=
=
min:
7
6
1
1
1
s-a-c-d-t:
s-a:
a-c:
c-d:
d-t:
10 − 4
6−1
2−0
7−3
=
=
=
=
min:
6
5
2
4
2
s-a-c-b-e-f-t:
s-a:
a-c:
c-b:
b-e:
e-f:
f-t:
10 − 6
6−3
4−0
7−4
1−0
6−0
=
=
=
=
=
=
min:
4
3
4
3
1
6
1
s-a-c-b-e-d-t:
s-a:
a-c:
c-b:
b-e:
e-d:
d-t:
10 − 7
6−4
4−1
7−5
1−0
7−5
=
=
=
=
=
=
min:
3
2
3
2
1
2
1
= 10
=
3
=
7
min: 3
Maximaler Fluss: 13
b) Geben Sie einen minimalen Schnitt an.
{(a, d), (c, d), (e, d), (e, f ), (e, t)}
33. Aufgabe (4 Punkte) Matching:
Ein Personalchef hat mehrere Stellen zu besetzen (K, L, M, N, O, P, Q, R). Er hat mehrere Bewerbungen vorliegen, wobei die Bewerber für mehrere Jobs geeignet sind (in Klammern für jeden
Bewerber angegeben): Alfred (K, P ), Bruno (O, R), Cornelia (L, R), Dorit (N, R), Emil (Q, M ),
Frida (O, P ), Gundula (P, N, R).
Finden Sie auf graphentheoretischem Wege eine Zuordnung, so dass möglichst viele der vakanten
Stellen mit einem geeigneten Bewerber besetzt werden können.
Das Problem wird als Graph aufgefasst, indem man die Berufe und die Personen als Knoten
betrachtet und die Beziehung der Eignung“ als Kante zwischen der Person und den Berufen,
”
für die sie geeignet ist. Der entstandende Graph ist ein bipartiter Graph, und die Aufgabe
besteht nun darin, ein maximales Matching zu finden. Ein perfektes Matching kann man in
diesem Graph nicht finden, denn die Knoten M, Q haben nur einen gemeinsamen Nachbarn
E – folglich kann einer dieser zwei Knoten nicht “gematcht” werden.
Das Matchingproblem wird auf das Flussproblem reduziert, indem man zwei zusätzliche
Knoten, die Quelle (S) und die Senke (T ), hinzufügt sowie Kanten zwischen der Quelle und
allen Knoten aus der ersten Menge (die Jobs) und zwischen denen aus der zweiten Menge (die
Personen) und der Senke. Alle Kanten haben Kapazität Eins. Ein möglicher maximaler Fluss
entspricht einem maximalen Matching in diesem Graphen. Dieser ist mit Rot eingetragen.
K
A
L
B
M
C
N
S
D
O
E
P
F
Q
G
R
T
Herunterladen