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