1 Algorithmische Graphentheorie Sommersemester 2016 1. Vorlesung Rundreiseprobleme Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 2 Übersicht I) Eulerkreise III) Handlungsreisende II) Hamiltonkreise (nächste Woche!) 3 I) Eulerkreise Def. Sei G ein (un-)gerichteter Graph. Ein Eulerkreis (-weg ) in G ist ein Kreis (Weg), der jede Kante genau einmal durchläuft. Ein Graph heißt eulersch, falls er einen Eulerkreis enthält. Königsberger Brückenproblem [Euler, 1741] C Angenommen ja. K Ist dieser (Multi-) Graph eulersch? A B Basel 1707 – St. Petersburg 1783 Geburtsstunde der Graphentheorie! ⇒ Es gibt einen Eulerkreis K. D Aber deg D = 3, also ungerade. 4 Satz von Euler für ungerichtete Graphen Satz. Sei G ein ungerichteter und zshg. Graph. Dann gilt: G eulersch ⇔ alle Knoten haben geraden Grad. Beweis. ⇒“ klar. ” vk = v0 K v1 v G ⇐“ Sei v0 ∈ V . Wähle einen Nachbarn v1 ∈ Adj[v0 ]. ” Markiere die Kante v0 v1 als gebraucht. Wiederhole diesen Schritt, bis aktueller Knoten vk nur noch zu gebrauchten Kanten inzident ist. Alle Knotengrade gerade ⇒ vk = v0 ., d.h. K := hv0 , v1 , . . . , vk−1 , v0 i ist Kreis. ⇒ in (V, E(K)) haben alle Knoten geraden Grad. 5 Satz von Euler für ungerichtete Graphen Satz. Sei G ein ungerichteter und zshg. Graph. Dann gilt: G eulersch ⇔ alle Knoten haben geraden Grad. Beweis. ⇒“ klar. ” v0 K v K0 G ⇐“ Im Restgraphen (V, E \ E(K)) haben alle Kno” ten geraden Grad.– aber er muss nicht zshg. sein! Beweis konstruktiv. Laufzeit der Konstruktion? Durchlaufe K noch einmal. Wenn ein Knoten v ∈ K noch eine unbenutzte Kante besitzt, finde einen neuen Kreis K 0 durch v und füge ihn in K ein. Durchlaufe weiter den neuen Kreis K (bis v0 ). 6 Eulerkreis, ganz schnell Satz. Sei G = (V, E) ein ungerichteter und zshg. Graph. (i) Man kann in O(E) Zeit testen, ob G eulersch ist. (ii) Falls G eulersch ist, so kann man in O(E) Zeit einen Eulerkreis finden. Beweis. (ii) Implementiere den Beweis des Satzes von Euler. Trick: Verwalte in jedem Knoten v einen Zeiger curr[v], der auf den ersten Nachbarn w zeigt mit vw unbenutzt; falls alle zu v inzidenten Kanten benutzt sind, sei curr[v] = nil . Beispiel: v curr[v] Gesamtanzahl Zeigeränderungen P = v∈V deg v = 2|E| 7 Satz von Euler für gerichtete Graphen Satz. Satz. schwach | {z } ? Sei G ein ungerichteter und zshg. Graph. Dann: für jeden Knoten v gilt: G eulersch ⇔ indeg v = outdeg v. schwach | {z } Sei G = (V, E) ein ungerichteter und zshg. Graph. (i) Man kann in O(E) Zeit testen, ob G eulersch ist. (ii) Falls G eulersch ist, so kann man in O(E) Zeit einen Eulerkreis finden. Beweis. Im Prinzip wie im ungerichteten Fall. Man muss einen curr-Zeiger allerdings nur dann weiterrücken, bevor man die aktuelle Kante benutzt. P Kosten fürs Zeigerbewegen: v∈V outdeg v = |E|. 8 II) Hamiltonkreise Def. Sei G ein (un-)gerichteter Graph. Ein Hamiltonkreis (-weg ) in G ist ein Kreis (Weg), der jeden Knoten genau einmal durchläuft. Ein Graph heißt hamiltonsch, falls er einen Hamiltonkreis enthält. Sir William Rowan Hamilton Icosian Game / Traveller’s Dodecahedron 1805 Dublin – 1865 Dunsink (c) 2002 James Dalgety, The Puzzle Museum 9 A Voyage Round the World Frage: Ist das Skelett des Dodekaeders hamiltonsch? Antwort: Ja! PS: Die Skelette der vier anderen platonischen Körper auch :-) 10 Bad News Satz. [Karp, 1972] (Un)gerichteter Hamiltonkreis und -weg sind NP-schwer. Beweis. SAT ist NP-schwer [Cook, 1971] SAT p CLIQUE p VC p gerHK p HK Was nun? – lässt sich (in Polynomialzeit) reduzieren auf“ ” – ist höchstens so schwer wie“ ” • Finde Graphenklassen, in denen alle Graphen hamiltonsch sind. • Finde möglichst große Graphenklassen, in denen das HamiltonkreisProblem polynomiell lösbar ist. • Finde möglichst spezielle Graphenklassen, in denen das Hamiltonkreis- Problem NP-schwer ist. • Finde notwendige oder hinreichende Bedingungen dafür, dass ein Graph hamiltonsch ist. 11 Satz von Bondy und Chvátal [1976] Satz. ⇒“ ” ⇐“ ” K v3 vi−1 K0 Beweis. v2 u v Sei G = (V, E) ein ungerichteter Graph mit |V | ≥ 3. Seien u und v nicht-adjazente Knoten von G mit := (V, E ∪ {uv}) deg u + deg v ≥ n := |V |. Dann gilt: G hamiltonsch ⇔ G + uv hamiltonsch. Jeder HK in G ist auch ein HK in G + uv. O.B.d.A. benutzt jeder HK in G + uv Kante uv. Sei K = hu = v1 , v2 , . . . , vn = v, ui ein solcher. Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . vi Es gilt |A| = degG u − 1 und |B| = degG v − 1. vn−1 vn−2 ⇒ |A| + |B| = degG u + degG v − 2 ≥ n − 2 aber |A ∪ B| ≤ n − 3 ⇒ es gibt ein i ∈ A ∩ B. ⇒ K 0 = hu, v2 , . . . , vi−1 , v, vn−1 , . . . , vi , ui ist HK in G. 12 Satz von Dirac Satz. Sei G = (V, E) ein ungerichteter Graph mit |V | ≥ 3. Seien u und v nicht-adjazente Knoten von G mit deg u + deg v ≥ |V |. Dann gilt: G hamiltonsch ⇔ G + uv hamiltonsch. Kor. Sei G = (V, E) ein ungerichteter Graph mit |V | ≥ 3. Falls jeder Knoten von G Grad ≥ |V |/2 hat, so ist G hamiltonsch. Beweis. Probieren Sie’s!