preflow-push Algorithmus - am Institut für Theoretische Informatik

Werbung
Übung 5 – Algorithmen II
Moritz Kobitzsch, Dennis Schieferdecker – {kobitzsch,schieferdecker}@kit.edu
http://algo2.iti.kit.edu/AlgorithmenII.php
Institut für Theoretische Informatik - Algorithmik II
0
Schieferdecker:
KIT –Kobitzsch,
Universität des Landes
Baden-Württemberg und
nationales
Forschungszentrum
in der Helmholtz-Gemeinschaft
Übung
5 – Algorithmen
II
Institut für Theoretische Informatik
www.kit.edu
Algorithmik II
Themenübersicht
Potentialmethode zur Algorithmenanalyse
Stapel mit multipop
preflow-push Algorithmus
Überblick
FIFO preflow-push
Heuristiken
Randomisierte Algorithmen
Grundlagen
Verifikation von Matrix-Matrix Multiplikation
1
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
O(1)
O(1)
O(n)
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
O(1)
O(1)
O(n)
push(1)
1
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
push(1)
push(5)
push(3)
push(2)
2
3
5
1
O(1)
O(1)
O(n)
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
pop
2
3
5
1
O(1)
O(1)
O(n)
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
O(1)
O(1)
O(n)
pop
3
5
1
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
O(1)
O(1)
O(n)
multipop(3)
3
5
1
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
O(1)
O(1)
O(n)
multipop(3)
5
1
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
O(1)
O(1)
O(n)
multipop(3)
1
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Datenstruktur Stapel mit multipop
push(v):
Element v oben auf Stapel legen
pop:
oberstes Element aus Stapel entfernen
multipop(k): oberste k Elemente aus Stapel entfernen
→ Laufzeit von n Operationen ist im worst-case O(n2 )
O(1)
O(1)
O(n)
multipop(3)
Stapel
Behauptung: Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
2
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Potentialmethode
Amortisierte Analyse
Sei Φ = #Elemente auf Stack ≥ 0
push(v):
∆Φ = 1 (Erhöhung)
pop:
∆Φ ∈ {−1, 0} (Erniedrigung)
multipop(k): ∆Φ ∈ {−k , . . . , 0} (Erniedrigung)
da #push ≤ n (bei n Operationen)
→ maximal n Erhöhungen
→ Erniedrigungen um maximal n möglich
→ insgesamte Änderungen um ≤ 2n
→ maximale Kosten O(n)
(Erhöhung oder Erniedrigung um 1 kostet O(1))
→ Was ist mit pop / multipop auf leerem Stack?
Worst-case Laufzeit für n Operationen ist amortisiert O(n)!
3
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Wiederholung
allgemeiner Ablauf
1. wähle aktiven Knoten v
2. falls gültige Kante (v , w ) existiert: push
schiebe Fluss entlang (v , w )
3. ansonsten: relabel
erhöhe Level von v
Bezeichnungen
aktiver Knoten
(Knoten v aktiv gdw. excess(v ) = inflow(v ) − outflow(v ) > 0)
gültige Kante
(Kante (v , w ) ∈ Gf ist gültig, wenn Level d (v ) = d (w ) + 1)
4
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Wiederholung
allgemeiner Ablauf
1. wähle aktiven Knoten v
2. falls gültige Kante (v , w ) existiert: push
WELCHEN?
WELCHE?
schiebe Fluss entlang (v , w )
WIEVIEL?
3. ansonsten: relabel
erhöhe Level von v
WIEVIEL?
Bezeichnungen
aktiver Knoten
(Knoten v aktiv gdw. excess(v ) = inflow(v ) − outflow(v ) > 0)
gültige Kante
(Kante (v , w ) ∈ Gf ist gültig, wenn Level d (v ) = d (w ) + 1)
4
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Wiederholung
allgemeiner Ablauf
1. wähle aktiven Knoten v
2. falls gültige Kante (v , w ) existiert: push
WELCHEN?
WELCHE?
schiebe Fluss entlang (v , w )
(f(v ,w ) = f(v ,w ) + min{c(f v ,w ) , excess (v )})
WIEVIEL?
3. ansonsten: relabel
erhöhe Level von v
(d (v ) = d (v ) + 1)
WIEVIEL?
Bezeichnungen
aktiver Knoten
(Knoten v aktiv gdw. excess(v ) = inflow(v ) − outflow(v ) > 0)
gültige Kante
(Kante (v , w ) ∈ Gf ist gültig, wenn Level d (v ) = d (w ) + 1)
4
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Übersicht
Unterschiedliche Auswahl des aktiven Knoten:
generic preflow-push
FIFO preflow-push
highest-level preflow-push
O(n2 m )
O(n3 )
√
O(n2 m )
Unterschiedliches relabel:
aggressive local relabeling
global relabeling
gap heuristic
→ nur Heuristiken, aber in Praxis deutliche Beschleunigung!
5
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Überblick
Unterschiede zu generic preflow-push
Verwalte aktive Knoten in FIFO Liste
(füge Knoten nach relabel bzw. aktiv gewordene Knoten hinten ein)
push auf aktivem Knoten bis relabel oder excess abgebaut
(typisches Vorgehen bei Ausführung per Hand)
Theorem: FIFO preflow-push findet in O(n3 ) einen maximum Fluss
6
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
1
4
5
7
G
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|9
0
3
0|2
0
6
0|4
0
6
0
1
0|2
...
0|3
8
2
0|1
0
1
0
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
start phase
1
4
5
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|9
0
3
0|2
0
6
0|4
0
6
0
1
0|2
...
0|3
8
2
0|1
0
1
0
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
non − saturating
1|9
0
4 √
1
3
0|2
0
6
0|4
0
6
5
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
1
0|2
...
0|3
8
2
0|1
0
1
0
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
1|9
0
4 √
1
3
0|2
0
6
0|4
0
6
5
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
1
0|2
...
3|3
5
2
0|1
3
1
0
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
1|9
0
4 √
1
3
0|2
0
6
0|4
0
6
5
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
2
1
2|2
...
3|3
3
2
0|1
3
1
0
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
1|9
0
4 √
1
3
0|2
0
6
0|4
0
6
5
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
2
1
2|2
...
3|3
2
2
1|1
3
1
1
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
1|9
0
4 √
1
3
0|2
0
6
0|4
0
6
5
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
relabel
...
2
1
2|2
3|3
2
3 √
1|1
3
1
1
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
1|9
0
4 √
1
3
0|2
0
6
4|4
4
6
1
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
2
1
2|2
...
3|3
2
3 √
1|1
3
1
1
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
1|9
0
4 √
non − saturating
0
7 √
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
1
3
1|2
1
6
4|4
4
6
2
1
2|2
...
3|3
2
3 √
1|1
3
1
1
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Unterteile Ablauf in Phasen:
alle zu Phasenbeginn aktiven Knoten werden genau einmal betrachtet
→ pro Phase baut jeder Knoten max. 1x allen excess ab
→ pro Phase macht jeder Knoten max. 1x einen non-saturating push
→ #non-saturating ≤ n · #phases
next phase
0
4
0
7
7
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
1|9
1
3
1|2
1
6
4|4
4
6
2
1
2|2
...
3|3
2
3
1|1
3
1
1
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
Φ=2
5
2
0|9
0
2
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
5
3
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
0|9
Φ=3
0
2
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
2
7
...
Φ=7
5
2
0|9
0
2
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
2
7
...
5
3
0|9
Φ=7
0
2
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
2
7
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
0|9
Φ=7
0
6
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
0
7
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
2|9
Φ=6
2
6
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
2
Phase mit relabel:
Phase ohne relabel:
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
n+1
0|9
0
n s
...
4
Φ=n+1
<n
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
0
Phase mit relabel:
Phase ohne relabel:
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
n+1
2|9
0
n s
...
4
Φ<n
<n
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beweis Laufzeit
Sei Φ = max{d (v ) | v ∈ Gf aktiv} ≥ 0
(Potential, dass gleich dem höchsten aktiven Level ist)
Phase mit relabel:
Phase ohne relabel:
∆Φ ≤ 1 (Erhöhung)
∆Φ ≤ −1 (Erniedrigung)
da #relabel ≤ 2n2 (siehe Vorlesung)
→ maximal 2n2 Erhöhungen
→ maximal 2n2 Erniedrigungen
→ #phases ≤ 4n2
→ #non-saturating ≤ n · #phases ≤ n · 4n2 = 4n3
restlicher Beweis wie bei generic preflow-push
8
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Laufzeit
Tgeneric preflow-push = Tinit + Tpushes + Trelabels ∈ O(n2 m )
Tinit = n + m
Tpushes = #pushes · (Tnode selection + Tedge selection + Tpush op )
Trelabels = #relabels · (Tnode selection + Tedge selection + Trelabel op )
mit
9
Tpush op = Trelabel op = Tnode selection = O(1)
#relabels ≤ 2n2
#pushes = #saturating + #non-saturating
(Lemma 7)
(#pushes + #relabels ) · Tedge selection ≤ 4nm
(Lemma 10)
#saturating ≤ nm
#non-saturating ∈ O(n2 m )
(Lemma 8)
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
(Lemma 9)
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Laufzeit
TFIFO preflow-push = Tinit + Tpushes + Trelabels ∈ O(n3 )
Tinit = n + m
Tpushes = #pushes · (Tnode selection + Tedge selection + Tpush op )
Trelabels = #relabels · (Tnode selection + Tedge selection + Trelabel op )
mit
9
Tpush op = Trelabel op = Tnode selection = O(1)
#relabels ≤ 2n2
#pushes = #saturating + #non-saturating
(Lemma 7)
(#pushes + #relabels ) · Tedge selection ≤ 4nm
(Lemma 10)
#saturating ≤ nm
#non-saturating ∈ O(n3 )
(FIFO)
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
(Lemma 8)
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
Relabeling
aggressive local relabeling
global relabeling
gap heuristic
Knotenauswahl
two-phase approach
10
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 1
0
5
0
2
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
5
2
0
2
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 1
0
5
5
3
0
2
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
2
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 1
0
5
5
4
0
2
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
2
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 1
0
5
0
2
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
5
5
0
2
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 1
5
6
0
5
0
2
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
2
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 1
0
5
0
2
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
5
2
0
2
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 1
5
6
0
5
0
2
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
2
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 2
s
0
n
0|9
0
0
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|1
0
0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 2
s
0
n
9
9|9
9
0
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|1
0
0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 2
s
0
n
9
9|9
9
1
0|1
0
0
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 2
s
0
n
9
9|9
8
1
1
1|1
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
1
0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
aggressive local relabeling
erhöhe Level in einem Schritt, so dass gültige Kante existiert
d (v ) = 1 +
min
(v ,w )∈E f
d (w )
(d (w ) ≥ d (v ), wenn keine gültige Kante in Gf existiert!)
Beispiel 2
s
0
n
n× relabel
or just 1 ?
9
9|9
8
1
1
1|1
11
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
1
0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
global relabeling
setze Levels auf

µ(v , t ) falls t von v erreichbar

n + µ(v , s ) sonst, falls s von v erreichbar
d (v ) =

2n − 1 sonst
Berechnung der Distanzen µ(v , ·) über Breitensuche in O(m )
(nur alle Ω(m ) Schritte, damit Kosten O(1) pro Schritt)
Beispiel 1
s
0
5
0|5
0
0
12
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
0
0
0|2
0
0
0|1
0
t 0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
global relabeling
setze Levels auf

µ(v , t ) falls t von v erreichbar

n + µ(v , s ) sonst, falls s von v erreichbar
d (v ) =

2n − 1 sonst
Berechnung der Distanzen µ(v , ·) über Breitensuche in O(m )
(nur alle Ω(m ) Schritte, damit Kosten O(1) pro Schritt)
Beispiel 1
s
0
5
5
5|5
5
0
12
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
0
0
0|2
0
0
0|1
0
t 0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
global relabeling
setze Levels auf

µ(v , t ) falls t von v erreichbar

n + µ(v , s ) sonst, falls s von v erreichbar
d (v ) =

2n − 1 sonst
Berechnung der Distanzen µ(v , ·) über Breitensuche in O(m )
(nur alle Ω(m ) Schritte, damit Kosten O(1) pro Schritt)
Beispiel 1
s
0
5
5
0|5
5
3
0|3
0
2
0|2
0
1
12
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|1
0
t 0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
global relabeling
setze Levels auf

µ(v , t ) falls t von v erreichbar

n + µ(v , s ) sonst, falls s von v erreichbar
d (v ) =

2n − 1 sonst
Berechnung der Distanzen µ(v , ·) über Breitensuche in O(m )
(nur alle Ω(m ) Schritte, damit Kosten O(1) pro Schritt)
Beispiel 2
s
0
5
0|5
0
0
12
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
0
0
0|2
0
0
0|1
0
t 0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
global relabeling
setze Levels auf

µ(v , t ) falls t von v erreichbar

n + µ(v , s ) sonst, falls s von v erreichbar
d (v ) =

2n − 1 sonst
Berechnung der Distanzen µ(v , ·) über Breitensuche in O(m )
(nur alle Ω(m ) Schritte, damit Kosten O(1) pro Schritt)
Beispiel 2
s
0
5
5
5|5
3
2
1
3
3|3
1
0|2
0
0
12
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|1
0
t 0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
global relabeling
setze Levels auf

µ(v , t ) falls t von v erreichbar

n + µ(v , s ) sonst, falls s von v erreichbar
d (v ) =

2n − 1 sonst
Berechnung der Distanzen µ(v , ·) über Breitensuche in O(m )
(nur alle Ω(m ) Schritte, damit Kosten O(1) pro Schritt)
Beispiel 2
5
s
0
5
5|5
2
6
3
3|3
3
2
0|2
0
1
12
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|1
0
t 0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
global relabeling
setze Levels auf

µ(v , t ) falls t von v erreichbar

n + µ(v , s ) sonst, falls s von v erreichbar
d (v ) =

2n − 1 sonst
Berechnung der Distanzen µ(v , ·) über Breitensuche in O(m )
(nur alle Ω(m ) Schritte, damit Kosten O(1) pro Schritt)
Allgemein
0
2n − 1
y
x
s
12
0
n
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
n+1
n+2
...
z
2
a
1
0
t 0
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
gap heuristic
wird ein Level durch relabel(v) leer,
setze Level von v und aller von v erreichbaren Knoten auf
d (w ) = max{d (w ), n}
(Lücke kann nie mehr überwunden werden, Fluss nur noch zurück zu s)
0
4
0
4
5
3
0
2
13
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
gap heuristic
wird ein Level durch relabel(v) leer,
setze Level von v und aller von v erreichbaren Knoten auf
d (w ) = max{d (w ), n}
(Lücke kann nie mehr überwunden werden, Fluss nur noch zurück zu s)
0
4
0
4
5
4
0
2
13
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
gap heuristic
wird ein Level durch relabel(v) leer,
setze Level von v und aller von v erreichbaren Knoten auf
d (w ) = max{d (w ), n}
(Lücke kann nie mehr überwunden werden, Fluss nur noch zurück zu s)
0
n
0
n
5
n
0
2
13
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
gap heuristic
wird ein Level durch relabel(v) leer,
setze Level von v und aller von v erreichbaren Knoten auf
d (w ) = max{d (w ), n}
(Lücke kann nie mehr überwunden werden, Fluss nur noch zurück zu s)
Allgemein
2
k
3
k−2
13
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
0
k−3
k−3
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
gap heuristic
wird ein Level durch relabel(v) leer,
setze Level von v und aller von v erreichbaren Knoten auf
d (w ) = max{d (w ), n}
(Lücke kann nie mehr überwunden werden, Fluss nur noch zurück zu s)
Allgemein
3
k+1
2
k
13
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
0
k−3
k−3
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
gap heuristic
wird ein Level durch relabel(v) leer,
setze Level von v und aller von v erreichbaren Knoten auf
d (w ) = max{d (w ), n}
(Lücke kann nie mehr überwunden werden, Fluss nur noch zurück zu s)
Allgemein
3
k+1
2
k
13
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
0
k−3
k−3
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
gap heuristic
wird ein Level durch relabel(v) leer,
setze Level von v und aller von v erreichbaren Knoten auf
d (w ) = max{d (w ), n}
(Lücke kann nie mehr überwunden werden, Fluss nur noch zurück zu s)
Allgemein
2
k+2
3
k+1
13
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
0
k−3
k−3
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
s
−
5
0|4
0
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
0
0
0|2
0
0
0|1
−
0
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
s
−
5
4
4|4
4
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
0
0
0|2
0
0
0|1
−
0
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
s
−
5
4
4|4
3
1
1
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
3|3
3
0
0|2
0
0
0|1
−
0
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
4
s
−
5
4|4
1
6
3
3|3
3
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|2
0
0
0|1
−
0
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
4
s
−
5
4|4
1
6
3
3|3
2
1
1
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
2|2
2
0
0|1
−
0
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
3
4
s
−
5
4|4
1
6
3|3
1
7
2
2|2
2
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|1
−
0
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
3
4
s
−
5
4|4
1
6
3|3
1
7
2
2|2
1
1
1
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
1|1
−
0
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
2
3
4
s
−
5
4|4
1
6
3|3
1
7
2|2
1
8
1|1
−
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
1
3
4
s
−
5
4|4
1
6
3|3
2
7
1|2
0
8
1|1
−
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
1
1
4
s
−
5
4|4
3
6
1|3
0
7
1|2
0
8
1|1
−
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
t
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Heuristiken
two-phase approach
Phase 1: wähle nur Knoten Level d (v ) < n aus
→ erzeugt maximum preflow
→ korrekter Fluss in t
Phase 2: nur noch Knoten mit Level d (v ) ≥ n übrig
→ Fluss nur nach s möglich
1
1
1
s
−
5
1|4
0
6
1|3
0
7
1|2
0
8
1|1
−
0
14
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
t
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Übersicht
Las Vegas Algorithmus
immer korrekte/optimale Lösung
Laufzeit ist Zufallsvariable
→ erwartete Laufzeit E[T ]
Bsp.: Quicksort
Monte Carlo Algorithmus
falsche/suboptimale Lösung möglich
→ mit Wahrscheinlichkeit p
deterministische Laufzeit
Bsp.: Miller-Rabin Primzahltest,
nicht vorbereiteter Student beim multiple-choice Test
15
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Monte Carlo Simulation
Monte Carlo Simulation
nicht zu verwechseln mit Monte Carlo Algorithmus!
Zufallsexperimente sehr oft ausführen (Gesetz der großen Zahlen)
je länger / öfter ausgeführt, desto bessere Ergebnisse
Alternative zur analytischen Lösung
Verteilungsfunktion unbekannter Zufallsvariablen
Nachbildung komplexer Prozesse
16
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Las Vegas → Monte Carlo
geg: Las Vegas Algorithmus mit erwarteter Laufzeit E[T ] = f (n)
ges: Monte Carlo Algorithmus mit Laufzeit O(f (n)), Fehlerrate p
Idee: Abbruch nach Zeit αf (n)
Ausgabe FALSCH, wenn Algorithmus abgebrochen wurde
P[T > αf (n)] ≤ 1/α (Markov Ungleichung)
→ Monte Carlo Algorithmus mit Laufzeit αf (n) und Fehlerrate p = 1/α
17
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Monte Carlo → Las Vegas
geg: Monte Carlo Algorithmus mit Laufzeit O(f (n)), Fehlerrate p,
Korrektheit in O(g (n)) prüfbar
ges: Las Vegas Algorithmus mit erwarteter Laufzeit E[T ]
Idee: Wiederhole MC bis korrekte Ergebnis gefunden
Laufzeit T ≤ i · O(f (n) + g (n)) (i Schritte benötigt)
E[T ] ≤ E[i ] · O(f (n) + g (n))
E[i ] = ∑k∞=1 k · pk −1 · (1 − p ) =
1
1−p
(nach ∑k∞=1 kx k = x /(1 − x )2 , x < 1)
→ Las Vegas Algorithmus mit erwarteter Laufzeit E[T ] ≤
18
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
O(f (n)+g (n))
1−p
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Aufgabe: Überprüfe, ob A · B = C für Matrizen A, B , C
deterministisch:
berechne A · B und vergleiche mit C
→ Laufzeit O(n3 ) (naiv), O(n2.37 ) (best)
randomisiert:
Wähle 0-1 Vektor r = (r1 , . . . , rn ) zufällig
Wenn A(Br ) = Cr dann KORREKT, sonst FALSCH
→ Laufzeit O(n2 )
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
19
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Aufgabe: Überprüfe, ob A · B = C für Matrizen A, B , C
deterministisch:
berechne A · B und vergleiche mit C
→ Laufzeit O(n3 ) (naiv), O(n2.37 ) (best)
randomisiert:
Wähle 0-1 Vektor r = (r1 , . . . , rn ) zufällig
Wenn A(Br ) = Cr dann KORREKT, sonst FALSCH
→ Laufzeit O(n2 )
r
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
19
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Aufgabe: Überprüfe, ob A · B = C für Matrizen A, B , C
deterministisch:
berechne A · B und vergleiche mit C
→ Laufzeit O(n3 ) (naiv), O(n2.37 ) (best)
randomisiert:
Wähle 0-1 Vektor r = (r1 , . . . , rn ) zufällig
Wenn A(Br ) = Cr dann KORREKT, sonst FALSCH
→ Laufzeit O(n2 )
r
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
19
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Aufgabe: Überprüfe, ob A · B = C für Matrizen A, B , C
deterministisch:
berechne A · B und vergleiche mit C
→ Laufzeit O(n3 ) (naiv), O(n2.37 ) (best)
randomisiert:
Wähle 0-1 Vektor r = (r1 , . . . , rn ) zufällig
Wenn A(Br ) = Cr dann KORREKT, sonst FALSCH
→ Laufzeit O(n2 )
C
r
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
19
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Aufgabe: Überprüfe, ob A · B = C für Matrizen A, B , C
deterministisch:
berechne A · B und vergleiche mit C
→ Laufzeit O(n3 ) (naiv), O(n2.37 ) (best)
randomisiert:
Wähle 0-1 Vektor r = (r1 , . . . , rn ) zufällig
Wenn A(Br ) = Cr dann KORREKT, sonst FALSCH
→ Laufzeit O(n2 )
C
r
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
19
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
Umformung:
ABr = Cr ⇔ (AB − C )r = 0 ⇔ Dr = 0
Wann ist Dr = 0, bei D 6= 0?
Dr = 0
⇒ ∑nj=1 D1,j rj = 0 (betrachte oBdA Element (Dr )1 )
⇒ r1 = ∑nj=2 D1,j rj /D1,1 (oBdA D1,1 6= 0)
Annahme: Werte für r2...n bereits festgelegt
→ noch 2 Möglichkeiten für r1 , Gleichheit bei maximal einer
→ P[Dr = 0] ≤ 0.5
→ Fehlerrate p ≤ 0.5
20
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
Umformung:
ABr = Cr ⇔ (AB − C )r = 0 ⇔ Dr = 0
Wann ist Dr = 0, bei D 6= 0?
Dr = 0
⇒ ∑nj=1 D1,j rj = 0 (betrachte oBdA Element (Dr )1 )
⇒ r1 = ∑nj=2 D1,j rj /D1,1 (oBdA D1,1 6= 0)
D
r
Annahme: Werte für r2...n bereits festgelegt
→ noch 2 Möglichkeiten für r1 , Gleichheit bei maximal einer
→ P[Dr = 0] ≤ 0.5
→ Fehlerrate p ≤ 0.5
20
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
Umformung:
ABr = Cr ⇔ (AB − C )r = 0 ⇔ Dr = 0
Wann ist Dr = 0, bei D 6= 0?
Dr = 0
⇒ ∑nj=1 D1,j rj = 0 (betrachte oBdA Element (Dr )1 )
⇒ r1 = ∑nj=2 D1,j rj /D1,1 (oBdA D1,1 6= 0)
Annahme: Werte für r2...n bereits festgelegt
→ noch 2 Möglichkeiten für r1 , Gleichheit bei maximal einer
→ P[Dr = 0] ≤ 0.5
→ Fehlerrate p ≤ 0.5
20
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Behauptung: Wenn AB 6= C dann P[ABr = Cr ] ≤ 0.5
Umformung:
ABr = Cr ⇔ (AB − C )r = 0 ⇔ Dr = 0
f ixed
Wann ist Dr = 0, bei D 6= 0?
Dr = 0
⇒ ∑nj=1 D1,j rj = 0 (betrachte oBdA Element (Dr )1 )
⇒ r1 = ∑nj=2 D1,j rj /D1,1 (oBdA D1,1 6= 0)
Annahme: Werte für r2...n bereits festgelegt
→ noch 2 Möglichkeiten für r1 , Gleichheit bei maximal einer
→ P[Dr = 0] ≤ 0.5
→ Fehlerrate p ≤ 0.5
20
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Randomisierte Algorithmen
Matrix-Matrix Multiplikation
Beschleunigung durch probability boosting
(nur bei p ≤ 0.5 schnelle Konvergenz)
Wiederhole Test k mal mit unterschiedlicher Wahl von r
Ein Test liefert FALSCH
→ AB 6= C, fertig
Alle Tests liefern KORREKT
→ false positive mit Wahrscheinlichkeit
P[ABr = Cr ] ≤ 0.5k
1,0
0,9
0,8
0,7
0,6
p 0,5
0,4
→ Laufzeit O(kn2 )
(linear längere Laufzeit bei exponentiell weniger Fehler)
0,3
0,2
0,1
0
2
4
6
8
10
k
21
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Ende!
Feierabend!
22
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Zusatzmaterial
nicht auf Fehler geprüft!
preflow-push Algorithmus
ausgewählte Beweise
Lemma 5: Aktive Knoten haben Weg zu s in Gf
Lemma 9: #non-saturating ∈ O(n2 m )
ausführliches Beispiel FIFO preflow-push
23
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
Gf
v
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
w
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
u
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
u
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
w
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
u
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
w
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
w
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
u
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
w
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
u
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe ≤ 0 (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
w
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
u
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Lemma 5: Für jeden aktiven Knoten v existiert ein Weg in Gf zu s
(intuitiv: man kann Fluss auf dem gleich Weg zurück- wie hinschicken)
Beweis:
Unterteile Gf in von v erreichbare Knoten (S) und den Rest (T )
∑u ∈S excess(u ) = ∑e∈E ∩T ×S fe − ∑e∈E ∩S ×T fe ≤ 0 (in G!)
in Gf nur (u , w ) ∈ T × S, kein (u , w ) ∈ S × T
(sonst w von v erreichbar → w ∈ S)
in G (u , w ) ∈ T × S mit f(u ,w ) = 0
oder (u , w ) ∈ S × T mit f(u ,w ) = c(u ,w )
→ s∈S
(da excess(v ) > 0 → und nur excess(s ) < 0 möglich)
T
S
w
24
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Gf
v
u
Institut für Theoretische Informatik
Algorithmik II
preflow-push Algorithmus
Laufzeit generic preflow-push
Lemma 9: #non-saturating ∈ O(n2 m )
Sei Φ := ∑ d (v ) ≥ 0, v aktiv
relabel:
∆Φ = 1
saturating push:
∆Φ ≤ 2n (Erhöhung)
non-saturating push: ∆Φ ≤ −1 (Erniedrigung)
da #relabels ≤ 2n2 , #saturating ≤ nm (siehe Vorlesung)
→ maximal 2n2 · 1 + nm · 2n Erhöhungen
→ maximal gleich viele Erniedrigungen
→ #non-saturating ≤ 2n2 + 2n2 m ∈ O(n2 m )
(da nur bei non-saturating push Erniedrigungen)
25
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
next phase
0
4
0
7
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
1|9
1
3
1|2
1
6
4|4
4
6
2
1
2|2
...
3|3
2
3
1|1
3
1
1
1
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
0|2
−
5
0|9
s
a
0
0
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
0|3
G
0
0
0
0
t
0|1
c
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
start phase 1
0|2
−
5
9|9
s
a
9
0
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
0|3
G
0
0
0
0
t
0|1
c
a
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
relabel
b
0|2
−
5
9|9
s
a
9
1√
0|3
G
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
0
0|3
−
0
0|2
0
0
t
0|1
c
remove()=a
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
0|2
−
5
9|9
s
a
9
1√
0|3
G
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0
0
0|3
−
0
0|2
0
0
t
0|1
c
insert(a)
a
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
start phase 2
0|2
−
5
9|9
s
a
9
1
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
0|3
G
0
0
0
0
t
0|1
c
a
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
2|2
−
5
9|9
s
a
7
1
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
0|3
G
2
0
0
0
t
0|1
c
remove()=a
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
2|2
−
5
9|9
s
a
7
1
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
0|3
G
2
0
0
0
t
0|1
c
insert(b)
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
2|2
−
5
9|9
s
a
4
1
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
3|3
G
2
0
3
0
t
0|1
c
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
2|2
−
5
9|9
s
a
4
1
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
3|3
G
2
0
3
0
t
0|1
c
insert(c)
c
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
relabel
b
2|2
−
5
9|9
s
a
4
6√
3|3
G
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
2
0
0|3
−
0
0|2
3
0
0|1
c
t
c
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
2|2
−
5
9|9
s
a
4
6√
3|3
G
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
2
0
0|3
−
0
0|2
3
0
t
0|1
c
insert(a)
a
c
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
start phase 3
2|2
−
5
9|9
s
a
4
6
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
3|3
G
2
0
3
0
0|1
c
t
a
c
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
relabel
b
2|2
−
5
9|9
s
a
4
6
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
√
0|3
−
0
0|2
3|3
G
2
1
3
0
t
0|1
c
remove()=b
a
c
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
2|2
−
5
9|9
s
a
4
6
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
√
0|3
−
0
0|2
3|3
G
2
1
3
0
t
0|1
c
insert(b)
b
a
c
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
relabel
b
2|2
−
5
9|9
s
a
4
6
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
√
0|3
−
0
0|2
3|3
G
2
1
3
1
√
c
t
0|1
remove()=c
b
a
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
2|2
−
5
9|9
s
a
4
6
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
√
0|3
−
0
0|2
3|3
G
2
1
3
1
√
c
t
0|1
insert(c)
c
b
a
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
non − saturating push
b
2|2
−
5
5|9
s
a
0
6√
3|3
G
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
2
1
√
0|3
−
0
0|2
3
1
√
c
t
0|1
remove()=a
c
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
b
start phase 4
2|2
−
5
5|9
s
a
0
6
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
0|3
−
0
0|2
3|3
G
2
1
3
1
0|1
c
t
c
b
Institut für Theoretische Informatik
Algorithmik II
FIFO preflow-push Algorithmus
Beispiel
und so weiter...
26
Kobitzsch, Schieferdecker:
Übung 5 – Algorithmen II
Institut für Theoretische Informatik
Algorithmik II
Herunterladen