Algorithmen und Datenstrukturen

Werbung
1
Algorithmen und Datenstrukturen
Wintersemester 2016/17
25. Vorlesung
Leichte Kreise in Graphen
Prof. Dr. Alexander Wolff
Lehrstuhl für Informatik I
2-6
Kürzeste Kreise
– Gewichteter und ungewichteter Fall
– Gerichteter und ungerichteter Fall
Z.B. für einen ungewichteter und ungerichteter Graphen G :
Für einen Knoten v liefert BFS(G , v ) – bis zur ersten
Nicht-Baumkante – einen kürzesten Kreis Cv durch v .
Der kürzeste der Kreise in der Menge {Cv | v ∈ V } ist ein
kürzester Kreis in G .
Laufzeit: O (V E )
3-1
Minimales durchschnittliches Kantengewicht
Sei G = (V , E ) ein gerichteter Graph mit beliebigen
Kantengewichten w : E → R. Sei n = |V |.
Für einen gerichteten Kreis C = he1 , e2 , . . . , ek i sei
k
X
1
µ(C ) =
w (ei )
k
i =1
sein durchschnittliches Kantengewicht.
µ? = µ(C ? ) =
Sei C die Menge aller gerichteter Kreise in G und
?
µ = min µ(C )
1
0
C?
1 1
2
2
C ∈C
das minimale durchschnittliche Kantengewicht
eines Kreises (minimum mean cycle weight).
3
7
0
1
1
−1
1
−1
4-7
Rohe Gewalt
Wir suchen also einen Kreis C ? mit µ(C ? ) = µ? , d.h. einen
Kreis mit minimalem durchschnittlichem Kantengewicht.
MinMeanCycleBruteForce(DirectedWeightedGraph G , w )
µmin = ∞
foreach C = he1 , e2 , . . . , ek i ∈ C do
Pk
1
µ = k i =1 w (ei )
if µ < µmin then
µmin = µ
C0 = C
return C 0
Laufzeit?
Mindestens exponentiell in |V | :-(
höchstens exponentiell in |E |
5-6
Vorbereitungen
Wir nehmen an, dass G stark zusammenhängend ist, d.h. es
gibt für jedes Knotenpaar (u , v ) einen gerichteten u -v -Weg.
Sei s ein beliebiger Knoten von G .
(cc) David Eppstein
Ansonsten zerlegen wir G in seine starken Zusammenhangskomponenten ( wie?? ) und betrachten jede separat.
Sei δ(s , v ) das Gewicht eines kürzesten (leichtesten) s -v -Wegs.
Für k = 0, . . . , n − 1 sei δk (s , v ) das Gewicht eines kürzesten
s -v -Wegs, der aus genau k Kanten besteht (sonst ∞).
? ) Im Prinzip durch ein oder zwei Tiefensuchen (siehe https://en.wikipedia.org/wiki/Strongly connected component)
6-1
Schritt I
Zeige: Falls µ? = 0, dann gilt:
1. G hat keinen Kreis mit negativem Gewicht und
2. δ(s , v ) = min0≤k ≤n−1 δk (s , v ) für jeden Knoten v .
X
X
2
−1
C
−4
2
Beweis.
1. Angenommen es gäbe einen Kreis C mit w (C ) < 0.
⇒ µ(C ) < 0 ⇒ µ? < 0
2. Betrachte s -v -Weg π mit k > n − 1 Kanten.
⇒ π enthält Kreis C . Aber w (C ) ≥ 0. ⇒ w (π \ C ) ≤ w (π)
⇒ Es gibt einen kürzesten s -v -Weg mit ≤ n − 1 Kanten.
7-1
Schritt II
Falls µ? = 0, dann gilt:
– G hat keinen Kreis mit negativem Gewicht und
– δ(s , v ) = min0≤k ≤n−1 δk (s , v ) für jeden Knoten v .
Zeige:
(*)
Falls µ? = 0, dann gilt für jeden Knoten v
δn (s , v ) − δk (s , v )
max
≥ 0.
0≤k ≤n−1
n−k
Beweis: Nach Def. von δ gilt: δn (s , v ) ≥ δ(s , v )
Wegen (*) gilt:
Also gilt
⇒
δ(s , v ) = δk (s , v ) für ein k ∈ {0, . . . , n − 1}
δn (s , v ) ≥ δk (s , v ) für ein k ∈ {0, . . . , n − 1}
max 0≤k ≤n−1 δn (s , v ) − δk (s , v ) ≥ 0 ⇒ Beh.
n−k > 0
8-1
Schritt III
Sei C ein Kreis mit Gewicht 0. Seien u , v Knoten auf C .
Sei x das Gewicht des Wegs von u nach v auf C .
u
δ(s , u )
s
w (C ) = 0
−x
C
x
δ(s , v )
v
Zeige: δ(s , v ) = δ(s , u ) + x .
Klar:
δ(s , v ) ≤ δ(s , u ) + x .
Aber warum kann es keinen kürzeren Weg von s nach v geben?
Angenommen, es gälte δ(s , v ) < δ(s , u ) + x .
Dann gäbe es einen Weg von s über v nach u der Länge. . .
δ(s , v ) −x < (δ(s , u ) + x ) −x = δ(s , u )
zur Def. von δ.
9-6
Schritt IV
Falls µ? = 0, dann gilt für jeden Knoten v
δn (s , v ) − δk (s , v )
max
≥ 0.
0≤k ≤n−1
n−k
Zeige:
Falls µ? = 0, dann gibt es einen Knoten v auf dem Kreis C ? ,
so dass
δn (s , v ) − δk (s , v )
max
= 0.
0≤k ≤n−1
n−k
Schritt III
⇒ δn (s , v ) = δ(s , v ).
?
δ(s , C )
s
C?
i Kanten
v
n − i Kanten
(C ? wird > 1 Mal
durchlaufen!)
⇒ δn (s , v ) ≤ δk (s , v ).
Aber für welches k gilt
δn (s , v ) = δk (s , v )?
10 -
Schritt V
Falls µ? = 0, dann gilt für jeden Knoten v
δn (s , v ) − δk (s , v )
max
≥ 0.
0≤k ≤n−1
n−k
Falls µ? = 0, dann gibt es einen Knoten v auf dem Kreis C ? ,
so dass
δn (s , v ) − δk (s , v )
max
= 0.
0≤k ≤n−1
n−k
Zeige:
Falls µ? = 0, dann
δn (s , v ) − δk (s , v )
min max
= 0.
v ∈V 0≤k ≤n−1
n−k
Klar. . .
11 -
Schritt VI
Falls µ? = 0, dann
δn (s , v ) − δk (s , v )
min max
= 0.
v ∈V 0≤k ≤n−1
n−k
Zeige:
Falls wir eine Konstante t zum Gewicht jeder Kante von G
addieren, dann steigt µ? um t .
11 -
Schritt VI
Falls µ? = 0, dann
δn (s , v ) − δk (s , v )
min max
= 0.
v ∈V 0≤k ≤n−1
n−k
Zeige:
Falls wir eine Konstante t zum Gewicht jeder Kante von G
addieren, dann steigt µ? um t .
Zeige damit, dass
δn (s , v ) − δk (s , v )
max
.
v ∈V 0≤k ≤n−1
n−k
|
{z
}
Steigt auch um t , wenn alle Gew. um t erhöht werden.
?
µ = min
?
Zeige:
11 -
Schritt VI
Falls µ? = 0, dann
δn (s , v ) − δk (s , v )
min max
= 0.
v ∈V 0≤k ≤n−1
n−k
Zeige:
Falls wir eine Konstante t zum Gewicht jeder Kante von G
addieren, dann steigt µ? um t . + nt −kt = +t
n −k
z
}|
{
Zeige damit, dass
+nt
+kt
z }| { z }| {
δn (s , v ) − δk (s , v )
??
µ = min max
.
v ∈V 0≤k ≤n−1
n−k
|
{z
}
Zeige: Steigt auch um t , wenn alle Gew. um t erhöht werden.
X
11 -
Schritt VI
Falls µ? = 0, dann
δn (s , v ) − δk (s , v )
min max
= 0.
v ∈V 0≤k ≤n−1
n−k
Zeige:
Falls wir eine Konstante t zum Gewicht jeder Kante von G
addieren, dann steigt µ? um t . + nt −kt = +t
n −k
z
}|
{
Zeige damit, dass
+nt
+kt
z }| { z }| {
δn (s , v ) − δk (s , v )
? ?!
max
. =: β(t)
α(t) := µ = vmin
∈V 0≤k ≤n−1
n−k
|
{z
}
Zeige: Steigt auch um t , wenn alle Gew. um t erhöht werden.
Also:
?
?
X
α und β sind lineare Fkt. in t mit α(−µ ) = β(−µ )
und Steigung 1 ⇒ α ≡ β.
12 -
Schritt VII
Es gilt
(**)
δn (s , v ) − δk (s , v )
µ = min max
.
v ∈V 0≤k ≤n−1
n−k
?
[Karp, 1978]
Satz. Ein Kreis C ? mit kleinstem durchschnittlichen Kantengewicht (µ(C ? ) = µ? ) lässt sich in O (V E ) Zeit berechnen.
Gib einen Algorithmus an, der µ? in O (V E ) Zeit berechnet:
• Setze δ0 (s , s ) = 0 und, für v ∈ V \ {s }, setze δ0 (s , v ) = ∞.
• Für k = 1, . . . , n − 1 und v ∈ V , berechne in O (indeg v ) Zeit
δk (s , v ) = min δk −1 (s , u ) + w (u , v ).
uv ∈E
Dies benötigt insg. O (V E ) Zeit.
• Berechne µ? nach (**) in O (V 2 ) Zeit.
Herunterladen