Algorithmentheorie 13

Werbung
Algorithmentheorie
13 - Maximale Flüsse
Prof. Dr. S. Albers
Prof. Dr. Th. Ottmann
WS03/04
1
1. Maximale Flüsse in Netzwerken
12
4
5
9
4
t
2
10
9
s
15
4
5
8
WS03/04
3
5
10
7
2
3
3
5
5
8
2
Netzwerke und Flüsse
N = (V,E,c) gerichtetes Netzwerk
G = (V,E) gerichteter Graph, c: E → R+ Kapazitätsfunktion
s,t ∈ V, s Quelle , t Senke
Zulässiger (s,t)-Fluss:
f: E → R
a) 0 ≤ f (e) ≤ c(e) ∀e ∈ E Kapazitätsbeschränkung
b)
∑ f(e) = ∑ f(e)
e∈ein(v)
e∈aus(v)
∀v ∈ V-{s, t} Flusserhaltung
ein(v) = {Kanten in v hinein}
WS03/04
aus (v) = {Kanten aus v heraus}
3
Beispiel
12/2
4
5/5
9
10/9
3/3
4/4
10/4
9/4
s
4/4
5
8
WS03/04
3/3
5
3
7/4
2/2
5
t
2
15/1
5/5
8
4
Doppelkanten
O.B.d.A. hat der Graph keine Doppelkanten.
WS03/04
5
Der Wert eines Flusses
Sei f ein zulässiger Fluss Dann ist sein Wert:
W( f ) =
∑ f ( e) − ∑ f ( e)
e∈aus ( s )
e∈ein ( s )
Das Max-Fluss Problem:
Berechne einen zulässigen Fluss maximalen Werts.
WS03/04
6
2. Schnitte
Definition: Ein (s,t)-Schnitt ist eine Partition S,T von V, d.h. V = S ∪ T,
S ∩ T = ∅ , so dass s ∈ S, t ∈T.
Kapazität eines Schnitts:
C (S , T ) =
∑ c ( e)
e∈E ∩( S ×T )
1
10
1
s
10
t
10
10
2
WS03/04
7
Flüsse und Schnitte
Lemma 1: Seien f ein zulässiger Fluss und (S,T) ein (s,t)-Schnitt.
Dann gilt:
W ( f ) ≤ C (S , T )
Beweis:
W( f ) =
∑ f ( e) − ∑ f ( e )
e∈aus ( s )
WS03/04
e∈ein ( s )
8
3. Algorithmische Idee
Zunehmende Wege: Finde Wege, entlang deren der Fluss erhöht
werden kann.
1
10/1
1/1
s
10/0
t
10/1
10/0
2
WS03/04
9
Zunehmende Wege
1
10/10
1/1
s
10/9
t
10/10
10/9
2
WS03/04
10
4. Restnetzwerke
Restnetzwerk RN bzgl. eines zulässigen Flusses f:
E1 = { (v,w) : (v,w) = e ∈ E und f(e) < c(e)}
E2 = { (w,v) : (v,w) = e ∈ E und f(e) > 0}
Für e = (v,w) ∈ E verwende e1 für (v,w) ∈ E1
e2 für (w,v) ∈ E2
c : E1 ∪ E2 → R +
(sofern existent)
(sofern existent)
c (e1 ) = c(e) − f (e)
für e1 ∈ E1
c (e2 ) = f (e)
für e2 ∈ E2
RN = (V, E1∪ E2, c)
WS03/04
11
Beispiel
1
10/1
1/1
s
10/0
t
10/0
10/1
2
1
s
t
2
WS03/04
12
Beispiel
10/10
1
1/1
s
10/9
t
10/9
10/10
2
1
s
t
2
WS03/04
13
Schichtnetzwerke
V0 = {s}
Vi +1 = {w ∈ V − (V0 ∪ K ∪ Vi ); ∃v ∈ Vi : (v, w) ∈ E1 ∪ E2 } für i ≥ 1
V = U Vi
i ≥0


SN = V , (E1 ∪ E2 ) ∩ U (Vi × Vi +1 ), c 
i ≥0


WS03/04
14
Beispiel
1
10/1
1/1
s
t
10/1
10/0
2
WS03/04
10/0
1
9
1
s
10
1
2
10
t
1
9
15
Beispiel
1
10/10
s
1/1
t
s
9
10/10
10/9
2
WS03/04
10/9
10
1
1
1
9
1
t
10
2
16
Maximale Flüsse
Lemma 2: Sei f ein zulässiger (s,t)-Fluss in N und sei
das Schichtnetzwerk bzgl. f.
SN = (V , E , c )
a) f ist ein maximaler Fluss gdw. t ∉V
b) Sei f ein zulässiger (s,t)-Fluss in SN. Dann ist f ´: E
R mit
f ' (e) = f (e) + f (e1 ) − f (e2 )
ein zulässiger (s,t)-Fluss in N mit W ( f ' ) = W ( f ) + W ( f )
Definiere f (ei) = 0 für ei ∉
WS03/04
E.
17
Beispiel
1
10/10
s
1/0
t
10/10
10/10
2
WS03/04
10/10
10
s
1
10
1
10
2
t
10
18
Beweis, Teil b)
Beweis: b) Kapazitätsbedingungen. Sei e ∈ E, dann gilt:
WS03/04
19
Beweis, Teil b)
Für jeden Knoten v ∈ V gilt:
∑
e∈aus ( v )
f ′(e ) −
∑ f ′(e)
e∈ein ( v )
=
Flusserhaltung :
Wert :
WS03/04
20
Beweis, Teil a)
a) " ⇒"
Sei t ∈ V .
Dann existiert ein Weg P von s nach t in SN.
s
t
ε = min. Kapazität von Kanten in P
e auf P
ε
f (e ) = 
0 e nicht auf P
Also ist f nicht maximal.
WS03/04
21
Beweis, Teil a)
" ⇐"
Setze S = V , T = V − S
Dann gilt s ∈ S , t ∈ T , und (S , T ) ist ein (s, t ) − Schnitt.
(E1∪E2) ∩ (S×T) = ∅
f(e) = c(e) für e ∈ S ×T
f(e) = 0
für e ∈ T ×S
W( f ) =
∑(
e∈E ∩ S ×T )
f (e) −
∑( f )(e) = C (S , T )
e∈E ∩ T × S
Da W(g) ≤ C(S,T) für jeden zulässigen Fluss g, ist f ein maximaler
Fluss.
WS03/04
22
Maximale Flüsse und minimale Schnitte
Satz 1: Seien N = (V, E, c) ein Netzwerk und s, t ∈ V.
fmax= max. Wert eines zulässigen (s,t)-Flusses
cmin = min. Kapazität eines (s,t)-Schnittes.
fmax = cmin
Beweis: fmax und cmin existieren.
Wegen Lemma 1 gilt fmax ≤ cmin
Seien f ein Fluss mit W(f) = fmax und SN = (V,E,c) das Schichtnetzwerk
bzgl. f.
Setze S = V und T = V – S. Im Beweis von Lemma 2 zeigten wir:
W( f ) =
WS03/04
∑(
e∈E ∩ S ×T )
f (e) −
∑( f )(e) = C (S , T )
e∈E ∩ T × S
23
5. Blockierende Flüsse
Definition: Ein zulässiger Fluss f in einem Schichtnetzwerk SN ist
blockierend, wenn auf jedem Weg
s = v0
e1
v1
e2
v2
e3
ek
.....
vk = t
von s nach t mindestens eine Kante gesättigt ist, d.h. f(ei) = c(ei) für
mindestens ein i.
1
9/9
10/9
s
t
10/9
V0
WS03/04
9/9
2
V1
V2
24
Algorithmus
1. f(e)  0 für alle e ∈ E;
2. Konstruiere Schichtnetzwerk SN = (V,E,c ) bzgl. f;
3. while t ∈ V do
4.
Finde einen blockierenden Fluss f in SN;
5.
Aktualisiere f gemäß f wie in Lemma 2b) beschrieben;
6.
Konstruiere Schichtnetzwerk SN bzgl. f;
7. endwhile;
Wie findet man einen blockierenden Fluss?
Wie viele Iterationen?
WS03/04
25
6. Die Tiefe eines Schichtnetzwerks
Definition: Die Tiefe eines Schichtnetzwerks SN ist das k mit t ∈ Vk.
Lemma 3: Sei ki die Tiefe des Schichtnetzwerks in der i-ten Iteration.
Dann gilt ki > ki-1, für i ≥ 2.
Beweis: Schichtnetzwerk in der i-ten Iteration: SNi
Es existiert Weg P von s to t der Länge ki.
s = v0
e1
v1
e2
v2
e3
.....
ek
i −1
vki−1
ek
i
vk = t
i
dj = Schichtnummer von vj in SNi-1, 0 ≤ j ≤ ki
dj = ∞ wenn vj kein Knoten in SNi-1
WS03/04
26
Die Tiefe eines Schichtnetzwerks
Behauptung:
Für alle i ≥ 2 gilt:
a) Gibt es eine Kante von vj-1 nach vj in SNi-1, dann gilt dj = dj-1 + 1.
b) Gibt es keine Kante von vj-1 nach vj in SNi-1 dann gilt dj ≤ dj-1 .
c) ki-1 < ki
Beweis:
a) Offensichtlich.
WS03/04
27
Teil b)
b) Annahme: dj ≥ dj-1 +1
fi-1 ergibt SNi-1
fi ergibt SNi
Ist (v j −1 , v j )∈ E ⇒
Ist (v j , v j −1 )∈ E ⇒
Also (vj, vj-1) ∈ Ei-1
Somit ist dj-1 = dj + 1 und dj = dj-1 –1 < dj-1
WS03/04
28
Teil c)
c) Da v0 = s und d0 = 0, folgt aus a) und b), dass dj ≤ j, für 1 ≤ j ≤ ki.
Somit ki-1 = dk ≤ ki.
i
Annahme: ki-1 = ki.
Dann existiert ein Weg P in LNi-1.
s = v0
WS03/04
e1
v1
e2
v2
e3
.....
ek
i −1
vki−1
ek
i
vk = t
i
29
Teil c)
Da wir einen blockierenden Fluss in SNi-1 berechnen, gibt es eine
gesättigte Kante
vj-1
(v , v )∈ E
(v , v )∈ E
j −1
j
WS03/04
j
⇒
j −1
⇒
ej
vj
30
Die Anzahl der Iterationen
Korollar: Die Anzahl der Iterationen ist ≤ n.
WS03/04
31
7. Blockierende Flüsse: DFS-Algorithmus
2
2
s
3
4
1
1
2
2
2
2
3
4
t
1
5
Beginne bei s und wähle stets die erste ausgehende Kante aus einem
Knoten bis a) t erreicht
oder b) Sackgasse v erreicht.
(a) Bestimme die kleinste Kap. ε entlang d. Wegs. Erhöhe den Fluss
um ε, vermindere die Kap. um ε und entferne gesättigte Kanten.
(b) Gehe einen Knoten zurück, entferne v und seine eingehenden
Kanten.
WS03/04
32
Analyse
Satz 2: Ein blockierender Fluss kann in Zeit O(ne) berechnet werden.
Beweis: k =Tiefe des Schichtnetzwerks
Konstruktion eines Wegs benötigt Zeit
O(k + # durchlaufene Kanten, die in Sackgassen enden).
Höchstens e Wege werden konstruiert.
Gesamtzeit: O(ke + e) = O(ne)
WS03/04
33
Verbesserter Algorithmus
Arbeite mit dem Schichtnetzwerk.
Potenzial eines Knotens v bzgl. f


PO(v ) = min  ∑ c(e ) − f (e ), ∑ c(e ) − f (e )
e∈ein (v )
e∈aus (v )

PO* = min {PO(v): v ∈ V}
WS03/04
34
Verbesserter Algorithmus
Wähle v mit PO(v) = PO*.
Schiebe PO* Flusseinheiten von v in höhere Schichten.
4
4
2
2
2
Vl
t
3
3
5
4
2
Vl-1
2
1
3
4
WS03/04
1
Vl+1
35
Verbesserter Algorithmus
Schicht Vh:
Menge Sh ⊆ Vh, die PO* zusätzliche Flusseinheiten hat.
PO* =
∑ S [x],
x∈S h
S [x ] = Überfluss am Knoten x.
Ziehe PO* Flusseinheiten nach v aus niedrigeren Schichten.
Fluss erhöht sich um PO* Einheiten.
Vereinfache das Netzwerk, indem gesättigte Kanten und Knoten mit
Ein- oder Ausgangsgrad gleich 0 entfernt werden. (Mindestens
ein Knoten wird entfernt.)
WS03/04
36
Das Schieben von Fluss
Algorithmus schiebe(x,S,h);
\\ x ist Knoten in Schicht Vh und bei x sind S zusätzliche Flusseinheiten
verfügbar. Diese werden in Knoten der Schicht Vh+1 geschoben.
1. while S >0 do
2.
Sei e = (x,y) die erste aus x ausgehende Kante;
δ  min(S, c(e) – f(e));
3.
4.
Erhöhe den Fluss auf e um δ, vermindere c(e) um δ,
füge y zu Sh+1 hinzu (falls noch nicht El.), erhöhe S[y] um δ;
5.
S  S - δ;
6.
if c(e) = 0 then entferne e aus dem Graphen endif;
7. endwhile;
8. Entferne x aus Sh und setze S[x] auf Null;
9. if (aus(x) = ∅ und x ≠ t) or (ein(x) = ∅ und x ≠ s) then
10.
Füge x zur Menge del hinzu;
11. endif;
WS03/04
37
Algorithmus für blockierenden Fluss
for all x ∈ V do S[x]  0 endfor;
for all l, 0 ≤ l ≤ k, do Sl  ∅ endfor;
del  ∅
while SN ist nicht leer do
Berechne PO[v] für alle v ∈ V und PO* = min {PO[v]; v ∈ V};
Sei v ∈ Vl ein Knoten mit PO* = PO[v];
6.
S[v]PO*; Sl{v};
7.
for h von l bis k – 1 do
8.
for all x ∈ Sh do schiebe(x,S[x], h) endfor;
9. endfor;
10. S[v]PO*; Sl{v}
11. for h von l bis 1 do
12.
for all x ∈ Sh do ziehe(x,S[x],h) endfor;
13. endfor;
14. vereinfache(del)
15. endwhile;
1.
2.
3.
4.
5.
WS03/04
38
Ergebnis
Satz 3: Ein blockierender Fluss in einem Schichtnetzwerk kann in
Zeit O(n2) berechnet werden.
Beweis: 1-3: O(n)
Schleife 4-15: O(n)-mal ausgeführt. Jede Ausführung kostet O(n), wenn
wir schiebe, ziehe, vereinfache ignorieren.
Alle Ausführungen von schiebe / ziehe benötigen Zeit O(n + e).
Alle Ausführungen von vereinfache benötigen Zeit O(n + e).
WS03/04
39
Ergebnis
Satz 4: Ein maximaler Fluss kann in Zeit O(n3) berechnet werden.
Beweis: Ein Schichtnetzwerk und ein blockierender Fluss können in
Zeit O(n2) berechnet werden.
WS03/04
40
8. d-beschränkte Netzwerke
Definition: Sei d eine natürliche Zahl. N = (V,E,c) ist d-beschränkt,
wenn c(e) ∈ {1,2,...,d} für alle e ∈ E.
1-beschränkte Netzwerke heißen (0,1)-Netzwerke.
Anwendung unserer Flussalgorithmen auf d-beschränkte Netzwerke:
alle berechneten Flüsse sind ganzzahlig, d.h. f(e) ∈ IN0
der maximale Fluss ist ganzzahlig
WS03/04
41
d-beschränkte Netzwerke
Satz 5: Ein blockierender Fluss kann in einem d-beschränkten
Netzwerk in Zeit O(de) berechnet werden. Für d = 1 ergibt sich Zeit
O(e).
Beweis: DFS-Algorithmus
Zeit für die Konstruktion eines Wegs:
O(# Kanten auf s-t-Weg + # durchlaufenen Kanten, die in Sackgassen
enden)
Jede Kante ist in höchstens d Wegen enthalten.
WS03/04
42
Maximale Flüsse in Restnetzwerken
Lemma 4: Seien N ein Netzwerk und fmax der Wert eines maximalen
(s,t)-Flusses. Seien RN das Restnetzwerk bzgl. eines Flusses f und
fmax der Wert eines maximalen (s,t)-Flusses in RN. Dann gilt
fmax = fmax + W(f).
Beweis: Sei (S,V – S) ein (s,t)-Schnitt.
C(S,V – S): Kapazität von (S,V – S) bzgl. N
C(S,V – S): Kapazität von (S,V – S) bzgl. RN
WS03/04
43
Also
Cmin = Cmin − W ( f ),
wobei Cmin , Cmin die minimalen Kapazitäten von (s, t ) − Schnitten in
N bzw. RN sind.
WS03/04
44
9. Einfache Netzwerke
Definition: Ein Netzwerk N = (V,E,c) ist einfach, wenn indeg(v) = 1
oder outdeg(v) = 1 für alle v ∈ V.
Satz 6: Sei N = (V,E,c) ein einfaches (0,1)-Netzwerk. Dann kann ein
maximaler Fluss in Zeit O(n1/2e) berechnet werden.
WS03/04
45
Restnetzwerke einfacher Netzwerke
Behauptung: Sei N ein einfaches Netzwerk und f ein Fluss in N.
Dann ist RN einfach.
Beweis: Sei v ∈ V und indeg(v) = 1 (outdeg(v) = 1 analog).
Ist f(e) = 0 für e ∈ ein(v), dann ist f(e´) = 0 für alle e´ ∈ aus(v),
und v hat Eingangsgrad 1 in RN.
0
e
0
0
0
1
e
1
0
0
Ist f(e) = 1 für e ∈ ein(v), dann ist f(e´) = 1 für genau ein e´ ∈ aus(v),
und v hat Eingangsgrad 1 in RN.
WS03/04
46
Beweis von Satz 6
Blockierender Fluss kann in Zeit O(e) berechnet werden.
Wir zeigen: # Iterationen = O(n1/2).
fmax = Wert eines maximalen (s,t)-Flusses.
fmax < n1/2: ok
Angenommen fmax ≥ n1/2.
Sei Iteration l diejenige, in der der Flusswert auf ≥ fmax – n1/2 ansteigt.
Wir zeigen, dass das Schichtnetzwerk in Iteration l Tiefe ≤ n1/2 hat.
f : zulässiger (s,t)-Fluss unmittelbar vor Iteration l
RN: Restnetzwerk bzgl. f.
WS03/04
47
Beweis von Satz 6
Wegen Lemma 4 gibt es in RN einen Fluss f mit Wert
(
)
f max = f max − W ( f ) ≥ f max − f max − n1/ 2 = n1/ 2
O.B.d.A. ist f ganzzahlig, d.h. f(e) ∈ {0,1}.
RN ist einfach, und daher läuft höchstens eine Flusseinheit durch jeden
Knoten v ∈V – {s,t}.
f besteht aus n1/2 knotendisjunkten Wegen von s nach t.
Also gibt es einen Weg mit < n1/2 Zwischenknoten.
WS03/04
48
10. Matchings in bipartiten Graphen
G = (V,E) ungerichteter Graph.
Matching M ist eine Kantenmenge M ⊆ E , so dass keine zwei Kanten
e1, e2 ∈ M, e1≠e2 , einen gemeinsamen Endknoten haben.
Ein maximales Matching ist ein Matching maximaler Kardinalität.
WS03/04
49
Matchings in bipartiten Graphen
Ein ungerichteter Graph G = (V,E) ist bipartit, wenn V = V1∪V2
für V1,V2 ⊆ V mit V1∩V2 = ∅ und E ⊆ V1× V2.
WS03/04
50
Matchings in bipartiten Graphen
Satz 7: Sei G = (V1∪V2,E),E ⊆ V1×V2, ein bipartiter Graph. Dann kann
ein maximales Matching in Zeit O(n1/2e) berechnet werden.
Beweis: Konstruiere einfaches Netzwerk wie folgt:
(Alle Kapazitäten sind 1.)
s
WS03/04
t
51
Herunterladen