Ü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