9. Übung – Algorithmen I - am Institut für Theoretische Informatik

Werbung
9. Übung – Algorithmen I
Timo Bingmann, Christian Schulz
I NSTITUT
FÜR
T HEORETISCHE I NFORMATIK , P ROF. S ANDERS
Bingmann,
Schulz
1 KITTimo
– Universität
des Landes Christian
Baden-Württemberg
und
nationales
Forschungszentrum
in der Helmholtz-Gemeinschaft
9. Übung
– Algorithmen
I
Fakultät für Informatik
www.kit.edu
Institut für Theoretische
Informatik
Übersicht
Statistik der Mittsemesterklausur
Grundlagen der Graphentheorie
Bäume
Eulersche und Hamiltonsche Kreise
Bellman-Ford-Algorithmus
Negative Kreise finden
2 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Statistik der Mittsemesterklausur
3 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Punkteverteilung
Teilnehmer
20
15
10
5
0
0
5
4 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
10
15
20
Punkte
25
30
Fakultät für Informatik
Institut für Theoretische Informatik
0.8
0.6
0.4
0.2
Prozent der Punktzahl
Punkte pro Aufgabe
0
ap
He
te
ian n
ar
a
Inv Ofm
ist
a
DL tsub eln gen
m
ra
eu
r
Ka Fo erz
lle
ap
He tabe en rray
sh find A
Ha kat ktes
n
n
pli
ä
r
re
Du sch nz
kie
ar
te
be
un rpo G m
eie DA n
Zw im ione e
l
eis llis tei
Kr -Ko ach
sh /N
Ha Vor orem n
ile
r ts he tio hte
So er-T lika ac
st
r/N
ltip
Ma xmu s Vo en
tri ray off
Ma n/Ar t vs
te
tte
Lis erke s
v
HT
HT n in
te
Lis els Min
n
nti lete
de
Se
Fakultät für Informatik
Institut für Theoretische Informatik
5 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Grundlagen der Graphentheorie
6 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Graphen und Relationen
Relation
Ist eine Menge M gegeben, dann heißt R ⊆ M × M eine Relation und
man schreibt auch x R y , falls (x , y ) ∈ R .
Spezielle Relationen: symmetrisch, transitiv, antisymmetrisch,
Äquivalenz-Relationen, etc. Beispiele: x = y , x ≤ y oder x | y (teilt).
gerichteter Graph
Ein gerichteter Graph G = (V , E ) besteht aus Knoten V und Kanten E,
wobei V nicht leer ist und E ⊆ V × V ist.
ungerichteter Graph
Ein ungerichteter Graph G = (V , E ) besteht aus Knoten V und Kanten
E, wobei V nicht leer ist und E ⊆ {{x , y } | x , y ∈ V , x 6= y } ist.
7 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Teilbarkeitsgraph
Ein gerichteter Graph G = (V , E ) mit
V = {1, . . . , 9} und E = {(x , y ) | x , y ∈ V , x 6= y und x |y },
wobei x |y genau dann, wenn x teilt y , also ∃n ∈ N : xn = y gilt.
1
9
2
8
3
7
4
6
8 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
5
Fakultät für Informatik
Institut für Theoretische Informatik
Der Hyperwürfel Q3
Ein ungerichteter Graph G = (V , E ) mit V = {{0, 1}3 } und
E = {{x , y } | x , y ∈ V und x ⊕ y ∈ {100, 010, 001}}.
011
010
111
110
001
000
101
100
Zwei Knoten x , y ∈ V sind also adjazent, wenn x und y sich in genau
einer Ziffer unterscheiden.
9 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Adjazenz und Knotengrad
Sei G = (V , E ) ein ungerichteter Graph. Bereits bekannt:
Zwei Knoten x , y ∈ V mit x 6= y heißen genau dann adjazent, wenn
{x , y } ∈ E.
Ein Knoten x ∈ V und eine Kante e ∈ E heißen genau dann
inzident, wenn x ∈ e.
Für ein Knoten x ∈ V ist die Adjazenzmenge oder Nachbarn-Menge
also
Adj(x ) = {y ∈ V | x 6= y und {x , y } ∈ E } .
Der Grad eines Knoten x ∈ V ist
deg(x ) := |Adj(x )| .
(auch degG (x ) oder dG (x ) oder γG (x ) oder...)
10 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Knoten mit speziellem Knotengrad
Ein Knoten v ∈ V mit deg(v ) = 0 heißt isoliert.
Ein Knoten v ∈ V mit deg(v ) = 1 heißt Randknoten.
Ein Graph G = (V , E ) heißt knotenregulär vom Grad r , wenn
deg(v ) = r für alle v ∈ V gilt.
Beispiel: der Hyperwürfel Q3 ist 3-knotenregulär.
Ein (|V | − 1)-knotenregulärer Graph heißt vollständig.
K6
K4
11 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
K5
Fakultät für Informatik
Institut für Theoretische Informatik
Handshake-Lemma
Lemma: Ist G = (V , E ) ein ungerichteter Graph, dann gilt
X
deg(v ) = 2|E | .
v ∈V
12 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Handshake-Lemma
Lemma: Ist G = (V , E ) ein ungerichteter Graph, dann gilt
X
deg(v ) = 2|E | .
v ∈V
Beweis: Betrachte die Menge M := {(v , e) | v ∈ V , e ∈ E mit v ∈ e}.
12 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Handshake-Lemma
Lemma: Ist G = (V , E ) ein ungerichteter Graph, dann gilt
X
deg(v ) = 2|E | .
v ∈V
Beweis: Betrachte die Menge M := {(v , e) | v ∈ V , e ∈ E mit v ∈ e}.
Für jede Kante e ∈ E sind genau zwei Paare in M, also |M | = 2|E |.
12 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Handshake-Lemma
Lemma: Ist G = (V , E ) ein ungerichteter Graph, dann gilt
X
deg(v ) = 2|E | .
v ∈V
Beweis: Betrachte die Menge M := {(v , e) | v ∈ V , e ∈ E mit v ∈ e}.
Für jede Kante e ∈ E sind genau zwei Paare in M, also |M | = 2|E |.
Für jeden Knoten
v ∈ V sind genau alle ausgehenden Kanten in M,
P
also |M | = v ∈V deg(v ) .
12 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Handshake-Lemma
Lemma: Ist G = (V , E ) ein ungerichteter Graph, dann gilt
X
deg(v ) = 2|E | .
v ∈V
Beweis: Betrachte die Menge M := {(v , e) | v ∈ V , e ∈ E mit v ∈ e}.
Für jede Kante e ∈ E sind genau zwei Paare in M, also |M | = 2|E |.
Für jeden Knoten
v ∈ V sind genau alle ausgehenden Kanten in M,
P
also |M | = v ∈V deg(v ) .
Korollar: In jedem Graph gibt es eine gerade Anzahl von Knoten mit
ungeradem Knotengrad.
12 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Wege, Kreise und Zusammenhang
Ist G = (V , E ) ein ungerichteter Graph, dann
heißt eine Folge (v0 , e1 , v1 , e2 , . . . , vn−1 , en , vn ) mit vi ∈ V und ei ∈ E
eine Kantenfolge, ein Kantenweg oder nur Weg (path), wenn
ei = {vi −1 , vi } für i = 1, . . . , n .
Alternativ, kann man in Graphen ohne Mehrfachkanten eine
Kantenfolge auch durch die Knotenspur (v0 , . . . , vn ) beschreiben.
heißt eine Kantenfolge ein Kantenpfad oder nur Pfad (simple path),
wenn alle besuchten Knoten verschieden sind.
heißen zwei Knoten x , y ∈ V verbindbar (connected), wenn es
einen Weg mit x = v0 und y = vn gibt.
heißt der Graph G zusammenhängend (connected), wenn jedes
Paar (x , y ) ∈ V × V verbindbar ist.
13 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Wege, Kreise und Zusammenhang
Ist G = (V , E ) ein ungerichteter Graph, dann
heißt ein Kantenfolge (v0 , e1 , v1 , e2 , . . . , vn−1 , en , vn ) ein Kantenkreis
oder Kantenzyklus (cycle), wenn v0 = vn .
heißt der Graph G kreisfrei, kreislos oder zykelfrei (cycle free),
wenn G keinen Kantenkreis enthält.
14 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Bäume
15 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Warum Bäume?
H
H
H
H
H
H
H
H
H
C
C
C
C
C
C
C
C
H
H
H
H
H
H
H
H
H
Oktan
H
H
H
H
H
C
H
C
C
C
C
H
C
H
H
C
C
H
C
H
C
C
C
C
C
H
H
H
H
H
H
H
H
H
H
H
H
H
C
H
H
H
C
HHH
HHH
ein Isooktan
16 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
H
H
H
ein anderes Isooktan
Fakultät für Informatik
Institut für Theoretische Informatik
Charakterisierung von Bäumen
Definition: Ein ungerichteter Graph heißt Baum, wenn es von jedem
Knoten zu jedem anderen Knoten genau einen Kantenweg gibt.
Satz: Für einen ungerichteten Graphen G = (V , E ) sind äquivalent:
1
2
3
4
5
6
G ist ein Baum.
G ist zusammenhängend und |E | = |V | − 1.
G ist zusammenhängend und kreislos.
G ist kreislos und |E | = |V | − 1.
G ist maximal kreislos: G ist kreislos und jede zusätzliche Kante
zwischen nicht-adjazenten Knoten ergibt einen Kreis.
G ist minimal zusammenhängend: G ist zusammenhängend und
bei Entfernen einer beliebige Kante zerfällt G.
17 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Cayley
Ist G = (V , E ) ein zusammenhängender ungerichteter Graph, dann
heißt ein Untergraph (V , E 0 ) mit E 0 ⊆ E ein G aufspannender Baum,
wenn dieser ein Baum ist.
Satz von Cayley
Im vollständigen Graph Kn gibt es genau nn−2 verschiedene Kn
aufspannende Bäume.
Beispiel: K4 hat folgende 16 aufspannende Bäume:
18 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Eulersche und Hamiltonsche Kreise
Ein Kantenkreis heißt Eulersch,
wenn er alle Kanten des
Graphen genau einmal enthält.
Ein Kantenkreis heißt
Hamiltonsch, wenn er
alle Knoten des Graphen
genau einmal enthält (Beginn
und Ende einmal gezählt).
Ein Graph heißt Eulersch/Hamiltonsch, wenn er einen
Eulerschen/Hamiltonschen Kreis enthält.
19 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Eulersche und Hamiltonsche Kreise
Ein Kantenkreis heißt Eulersch,
wenn er alle Kanten des
Graphen genau einmal enthält.
Ein Kantenkreis heißt
Hamiltonsch, wenn er
alle Knoten des Graphen
genau einmal enthält (Beginn
und Ende einmal gezählt).
Ein Graph heißt Eulersch/Hamiltonsch, wenn er einen
Eulerschen/Hamiltonschen Kreis enthält.
19 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
Beweis: „=⇒“
Klar, denn G muss zusammenhängend sein und beim Passieren eines
Knoten wird dieser durch eine Kante betreten und durch eine andere
verlassen.
Da jede Kante genau einmal verwendet wird, muss der Knotengrad aller
Knoten gerade sein.
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
Beweis: „⇐=“
Angenommen der Graph hat diese Eigenschaften, so betrachtet man
eine Kantenpfad P = (v0 , e1 , v1 , e2 , . . . , vr −1 , er , vr ) maximaler Länge, in
dem also keine Kante zweimal vorkommt.
Behauptung 1: v0 = vr .
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
Beweis: „⇐=“
Angenommen der Graph hat diese Eigenschaften, so betrachtet man
eine Kantenpfad P = (v0 , e1 , v1 , e2 , . . . , vr −1 , er , vr ) maximaler Länge, in
dem also keine Kante zweimal vorkommt.
Behauptung 1: v0 = vr .
Wäre v0 6= vr , dann ist v0 zu einer ungeraden Anzahl Kanten in P
inzident.
Da v0 aber geraden Knotengrad hat, gibt es eine inzidente Kante
e∈
/ P.
Der Pfad P kann mit e verlängert werden, ist also nicht maximal!
Widerspruch =⇒ v0 = vr , also ist P ein Kreis.
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
Beweis: „⇐=“
Angenommen der Graph hat diese Eigenschaften, so betrachtet man
eine Kantenkreis C = (v0 , e1 , v1 , e2 , . . . , vr −1 , er , v0 ) maximaler Länge,
in dem also keine Kante zweimal vorkommt.
Behauptung 2: E (C ) := {ei | i = 1, . . . , r } = E.
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
Beweis: „⇐=“
Angenommen der Graph hat diese Eigenschaften, so betrachtet man
eine Kantenkreis C = (v0 , e1 , v1 , e2 , . . . , vr −1 , er , v0 ) maximaler Länge,
in dem also keine Kante zweimal vorkommt.
Behauptung 2: E (C ) := {ei | i = 1, . . . , r } = E.
Angenommen E (C ) 6= E, so betrachten wir G0 := (V , E \ E (C )).
Da G zusammenhängt, muss G0 und C einen gemeinsamen Knoten
w mit degG0 (w ) > 0 haben.
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
Beweis: „⇐=“
Angenommen der Graph hat diese Eigenschaften, so betrachtet man
eine Kantenkreis C = (v0 , e1 , v1 , e2 , . . . , vr −1 , er , v0 ) maximaler Länge,
in dem also keine Kante zweimal vorkommt.
Behauptung 2: E (C ) := {ei | i = 1, . . . , r } = E.
Angenommen E (C ) 6= E, so betrachten wir G0 := (V , E \ E (C )).
Da G zusammenhängt, muss G0 und C einen gemeinsamen Knoten
w mit degG0 (w ) > 0 haben.
Alle Knoten in G0 haben geraden Knotengrad, also kann man in G0
einen Kreis C 0 finden, der durch w geht.
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Satz von Euler (Graphen)
Satz: Ein Graph G = (V , E ) mit E 6= ∅ ist genau dann Eulersch, wenn
G zusammenhängend ist und alle Knoten geraden Knotengrad haben.
Beweis: „⇐=“
Angenommen der Graph hat diese Eigenschaften, so betrachtet man
eine Kantenkreis C = (v0 , e1 , v1 , e2 , . . . , vr −1 , er , v0 ) maximaler Länge,
in dem also keine Kante zweimal vorkommt.
Behauptung 2: E (C ) := {ei | i = 1, . . . , r } = E.
Angenommen E (C ) 6= E, so betrachten wir G0 := (V , E \ E (C )).
Da G zusammenhängt, muss G0 und C einen gemeinsamen Knoten
w mit degG0 (w ) > 0 haben.
Alle Knoten in G0 haben geraden Knotengrad, also kann man in G0
einen Kreis C 0 finden, der durch w geht.
C kann an Knoten w mit C 0 verlängert werden. Widerspruch zur
Maximalität =⇒ E (C ) = E.
20 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Algorithmus: Eulersche Kreise
Idee: Erweitere einen Kantenpfad solange, bis er Eulersch wird.
Überprüfe, ob jeder Knoten geraden Grad hat.
Wähle v0 ∈ V beliebig, setze P := (v0 ).
Sei P = (v0 , e1 , v1 , . . . , ei , vi ) der bisher konstruierte Pfad und
G0 = (V , E \ E (P )) der Restgraph.
21 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Algorithmus: Eulersche Kreise
Idee: Erweitere einen Kantenpfad solange, bis er Eulersch wird.
Überprüfe, ob jeder Knoten geraden Grad hat.
Wähle v0 ∈ V beliebig, setze P := (v0 ).
Sei P = (v0 , e1 , v1 , . . . , ei , vi ) der bisher konstruierte Pfad und
G0 = (V , E \ E (P )) der Restgraph.
Ist E = E (P ) so ist P ein gesuchter Eulerscher Kreis. Fertig.
Sonst wähle eine zum Knoten vi inzident Kante ei +1 ∈ E \ E (P ),
wobei Kanten bevorzugt werden, die keine Brücken sind.
Eine Kante ist keine Brücke, wenn G0 und
(V , E \ {e1 , . . . , ei , ei +1 }) gleich viele Komponenten haben.
Verlängere P mit der Kante ei +1 und wiederhole diesen Schnitt.
21 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Schmankerl: Graph-Isomorphie
Welche Graphen sind gleich (isomorph)?
22 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Schmankerl: Graph-Isomorphie
Welche Graphen sind gleich (isomorph)?
Tipp: Es gibt fünf Klassen.
22 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Bellman-Ford-Algorithmus
Wiederholung
Ausgehend von einem Knoten s berechne kürzesten Wege-Baum
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure BellmanFord(s : NodeId) : NodeArray × NodeArray
d = h∞, ..., ∞i : NodeArray of R ∪ {−∞, ∞}
parent = h⊥, ..., ⊥i : NodeArray of NodeId
d [s] := 0; parent[s] := s
for i := 1 to n − 1 do
forall e ∈ E do relax(e)
forall e = (u , v ) ∈ E do
if d [u ] + c (e) < d [v ] then infect(v )
return (d , parent )
Erinnerung Kante (u , v ) relaxieren:
1
wenn d [u ] + c (u , v ) < d [v ] dann d [v ] := d [u ] + c (u , v ), parent[v ] := u
23 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Bellman-Ford-Algorithmus
Wiederholung
1:
2:
3:
4:
5:
procedure infect(v : NodeId)
if d [v ] > −∞ then
d [v ] = ∞
forall e = (v , w ) ∈ E do infect(w)
return (d , parent )
Ziel: Korrektheit beweisen
1
2
3
zeige dies für Knoten v mit −∞ < µ[v ] < ∞
zeige dies für Knoten v mit −∞ = µ[v ]
zeige dies für Knoten v mit ∞ = µ[v ] (trivial)
24 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Bellman-Ford-Algorithmus
Fall 1
relaxiere alle Kanten (in bel. Reihenfolge) n − 1-mal
alle kürzesten Pfade in G haben höchstens n − 1 Kanten
jeder kürzeste Pfad ist Teilfolge dieser Relaxierungen
25 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Bellman-Ford-Algorithmus
Fall 1
jeder kürzeste Pfad ist eine Teilfolge dieser Relaxierungen
t1
t2
tk
z }| { z }| { z }| {
R = h... relax(e1 ) ... relax(e2 ) ... relax(ek ) ...i, |R | = (n − 1)|E |.
p = he1 , e2 , ..., ek i = hs, v1 , v2 , ..., vk i ein kürzester Weg
25 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Bellman-Ford-Algorithmus
Fall 2
Korrektheit für Knoten v mit −∞ = µ[v ]
sei e = (u , v ) mit d [u ] + c (e) < d [v ] nach Relaxierungen (Zeile 7)
⇒ d [v ] = ∞ (kürzeste Wege ändern sich nicht mehr, siehe Fall 1)
mittels infect: alle von v erreichbaren Knoten w ⇒ d [w ] = ∞
falls d [v ] im post-processing nicht auf −∞ gesetzt gilt:
d [x ] + c (e) ≥ d [y ] für jede Kante (x , y ) von jedem Pfad von s nach v
damit d [s] + c (p) ≥ d [v ] für jeden Pfad p von s nach v
damit d [v ] ≤ µ(v ) und damit d [v ] = µ(v )
26 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Negative Kreise finden
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure BellmanFord(s : NodeId) : NodeArray × NodeArray
d = h∞, ..., ∞i : NodeArray of R ∪ {−∞, ∞}
parent = h⊥, ..., ⊥i : NodeArray of NodeId
d [s] := 0; parent[s] := s
for i := 1 to n − 1 do
forall e ∈ E do relax(e)
Find negative cycle
...
return
negativer Kreis ist gerichteter Kreis mit Gewicht < 0
Fragestellung: ∃ negativer Kreis in G (und gebe einen aus)
27 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Negative Kreise finden
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure BellmanFord(s : NodeId) : NodeArray × NodeArray
d = h∞, ..., ∞i : NodeArray of R ∪ {−∞, ∞}
parent = h⊥, ..., ⊥i : NodeArray of NodeId
d [s] := 0; parent[s] := s
for i := 1 to n − 1 do
forall e ∈ E do relax(e)
Find negative cycle
...
return
−2
s
27 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
0
−2
Fakultät für Informatik
Institut für Theoretische Informatik
Negative Kreise finden
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure BellmanFord(s : NodeId) : NodeArray × NodeArray
d = h∞, ..., ∞i : NodeArray of R ∪ {−∞, ∞}
parent = h⊥, ..., ⊥i : NodeArray of NodeId
d [s] := 0; parent[s] := s
for i := 1 to n − 1 do
forall e ∈ E do relax(e)
Find negative cycle
...
return
Reachability?
R
s
27 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Negative Kreise finden
Allgemein
Hilfsknoten H + Kanten (H , v ) für v ∈ V mit Gewicht 0
H
Nach Ausführung von Bellman-Ford (in Zeile 7):
∀ negativen Kreise C:
∃(u , v ) ∈ C :
d [u ] + c (e) < d [v ]
28 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Negativen Kreis ausgeben
Nach Ausführung von Bellman-Ford (in Zeile 7):
∀ negativen Kreise C:
∃(u , v ) ∈ C :
d [u ] + c (e) < d [v ]
Ausgabe eines negativen Kreises:
→ Übungsblatt
29 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
30 Timo Bingmann, Christian Schulz
9. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Herunterladen