Amortisierte Analyse Fibonacci-Heaps II Minimale Schnitte z Einfacher Ausflug: Stacks Operationen z Laufzeit für Folge von n Operationen? z z Sternstunden der Algorithmik 15. Juni 2004 Gunnar W. Klau z z z z Gleiches Ergebnis mit Potenzialfunktion Φ Φ(D) sagt, wie gut oder schlecht die aktuelle Konfiguration der Datenstruktur D ist z z Dazu Potenzial mathematisch beschreiben: z Amortisierte Kosten einer Operation sind z z Analogie: Bankkonto z z z Künstliche Verteuerung billiger Operationen („Einzahlen“) Teure Operationen dürfen „abheben“, um die amortisierten Kosten zu senken z z z z Fibonacci-Heaps: Analyse Dann ist die Summe der amortisierten Kosten n n n i=1 i=1 i=1 Wir wählen eine Potenzialfunktion, die z z z z Σ ti ≤ Σ a i ai ti Φi Φ0 amortisierte Kosten für Operation oi tatsächliche Kosten für Operation oi Potenzial direkt nach Operation oi Potenzial vor o1 Zurück zu den Stacks: z Φ(S) = |S| z Reale Kosten push, pop: 1, multipop: k z nichtnegativ und am Anfang gleich Null ist Dann ist Φn – Φ0 ≥ 0 und damit tatsächliche Kosten + ∆Φ also auch Belastung durch zukünftige Kosten (insert) oder Entschärfung von teuren Operationen (∆Φ negativ). Amortisierte Analyse Σai = Σ(ti + Φi – Φi-1) = Φn – Φ0 + Σti z Funktion Φ, die jeden Heap auf eine reelle Zahl abbildet Sei o1,...,on eine Folge von n Operationen z z jedes Element kann nur einmal durch eine pop/multipop-Operation gelöscht werden: O(n) Fibonacci-Heaps: Analyse Amortisierte Analyse z push: O(1), pop: O(1) multipop: O(n) → O(n2) etwas pessimistisch z z push(S,x), pop(S) und multipop(S,k) z Betrachte i-te Operation z push: ai = 1 + |Si| - |Si -1| = 1 + (|Si -1| + 1) - |Si -1| = 2 z multipop: ai = k + |Si| - |Si -1| = k + (|Si -1| - k) - |Si -1| = 0 Folge von n Operationen hat also amortisierte Kosten 1 Fibonacci-Heaps: Analyse z z Zurück zu den Fibonacci-Heaps Konkrete Wahl von Φ? z z z Fibonacci-Heaps: Analyse z extractMax: z Was kann später große Kosten verursachen? Sicher Anzahl der Wurzeln W! Provisorisch: Φ = αW z z z fängt mit W1 Wurzeln an, hört mit W2 auf, entfernter Knoten hatte Grad d tatsächliche Kosten ti = c(d + W1), c Konstante ∆Φ = α(W2 – W1), also amortisierte Kosten: ai = c(d + W1) + α(W2 – W1) = (c – α)W1 + cd + αW2 Wir wählen α = c, also ai = cd + αW2 z z Fibonacci-Heaps: Analyse z increaseKey: z z z z z z z z amortisierte Kosten ai = c´(k + 1) + αk + β(2 – k) = (c´ + α – β)k + c´+ 2β Wähle β = c´+ α, es folgt ai = 3c´ + 2α = O(1) ∆Φ ≤ αk + β(2 – k), denn alle neuen Wurzeln waren aufgeregt (bis auf vielleicht eine), höchstens ein Knoten regt sich neu auf. (s. Bsp. auf voriger Folie) Nein, denn dort werden keine Knoten an- oder abgeregt und A bleibt unberührt. insert: z z Werden leicht zu Wurzeln und verursachen dabei noch Arbeit, also Φ = αW + βA Müssen wir extractMax neu abschätzen? z increaseKey (Forts.): tatsächliche Kosten ti = c´(k + 1), c´ Konstante Fibonacci-Heaps: Analyse z z Problem: teuer und erhöht Potenzial... Zweite Quelle für Φ: aufgeregte Knoten A z also ai = O(log n) Fibonacci-Heaps: Analyse schafft k neue Wurzeln z aber d = O(log n) und W2 = O(log n), denn alle Wurzeln haben unterschiedlichen Grad Erhöht die Anzahl der Wurzeln um 1 ai = ti + α = O(1+ α) = O(1) Resultat z Eine Folge von n insert-, min- und increaseKey- und m · n deleteMax-Operationen auf einem anfänglich leeren Fibonacci-Heap können in Zeit O(n + m log n) ausgeführt werden. Klar, dass Φ nichtnegativ und am Anfang 0 2 Warum „Fibonacci“-Heap? z Verschärfte Version eines Lemmas, das wir bewiesen haben: Minimale Schnitte Jeder Knoten vom Grad k hat mindestens Fk+2 Nachkommen. (k+2)-te Fibonacci-Zahl Problem z z z Beispiel Gegeben: Graph G = (V, E) mit Kantengewichten ce ∈ R≥ 0 ∀ e ∈ E NPschwer für ce ∈ R 3 Gesucht: Schnitt S ⊂ V, ∅ ≠ S ≠ V, kleinsten Gewichts („min cut“) Definitionen/Schreibweisen: Gewicht eines Schnittes: z z z z z z Fixiere einen Knoten r ∈ V Beobachtung: Jeder Schnitt ist auch r-s-Schnitt für einen Knoten s ≠ r, also auch der minimale Schnitt wie geht das? Algorithmus: Berechne minimalen r-s-Schnitt ∀ s ∈ V \{r} min cut = kleinster dieser Schnitte Mit vielen Tricks [Hao, Orlin 1992]: komplizierter Algorithmus 2 2 6 3 4 3 2 7 1 4 2 3 8 Anwendungen: z Max-Flow-Algorithmus 3 2 2 5 z z 2 1 Design von Kommunikationsnetzen (reliability) Tagebau Baseball elimination Algorithmus ohne Flüsse z z Nagamochi/Ibaraki, 1992 Frank, 1994 „einfach“ Stör/Wagner, 1997 Def.: Operation Knoten-Identifikation „ziehe zwei Knoten u und v zusammen“ 2 1 G 3 2 5 2 3 3 2 2 2 2,7 6 3 3 1 1 2 4 4 2 2 2 1 7 3 Guv 8 3 Idee z z z Beobachtung: Alle Schnitte des Graphen Guv entsprechen Schnitten in G, die u und v nicht trennen. Folgerung: min cut = min{min cut(Guv), min. u-v-cut} Algorithmus: Problem z Wie berechne ich r-s-Cut in Schritt 1)? z z z Dazu definiere legale Ordnung: z 1) Wähle 2 Knoten r und s und bestimme min. r-s-Schnitt C Mit Fluss? Nichts gewonnen. Idee: Wähle r und s so, dass der minimale Schnitt einfacher berechnet werden kann. z v1 beliebig vi ist Knoten u mit größtem Gewicht 2) Cmin := min(Cmin, C) 3) identifiziere(r, s) → Grs 4) |V| > 1 ? goto 1) Lösung z z Theorem 1: Sei v1, v2, ..., vn eine legale Ordnung von G. Dann ist δ({vn}) ein minimaler vn-1-vn-Schnitt. Beweis: Übung. von Kanten zu {v1, v2, ..., vi-1} für alle i. Berechnung der legalen Ordnung z z z Prioritätswarteschlange Q enthält alle Knoten nicht in {v1, ..., vi-1} Schlüssel(v) = ci-1(v) Beispiel an der Tafel (mitschreiben!) 2 1 3 2 5 3 Korrektheit MINCUT(G) z z 3 2 Algorithmus Sei v1 beliebiger Knoten in G; S = {v1}; n = |V(G)|; for i = 2 to n { vi ist derjenige Knoten u ∈ V \S, dass c(S : {u}) maximal ist; S = S ∪ {vi}; } if (n = 2) then return Schnitt δ({vn}); else { G´ = G nach Identifikation(vn-1, vn); return min{MINCUT(G´), δ({vn})}; 2 6 3 2 1 4 4 2 7 2 3 8 Der Algorithmus berechnet den minimalen Schnitt. Beweis: z Induktion über die Größe n der Knotenmenge. z z n=2 9 n → n + 1: Fall 1: min. cut ist vn-1-vn-cut 9 (Theorem 1) Fall 2: Sonst. Induktionsannahme. 4 Laufzeit z z z Aufgabe pro Iteration: z z Übungsblatt 3 |V| extractMax-Operationen |E| increaseKey-Operationen Mit Fibonacci-Heap: Vgl. Flüsse: Aufgabe 4 Aufgabe 1 Aufgabe 5 Aufgabe 2 5