Algorithmische Graphentheorie Sommersemester 2015 1. Vorlesung Rundreiseprobleme 1 Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Übersicht I) Eulerkreise 2 Übersicht I) Eulerkreise II) Hamiltonkreise 2 Übersicht I) Eulerkreise II) Hamiltonkreise 2 III) Handlungsreisende Übersicht I) Eulerkreise III) Handlungsreisende II) Hamiltonkreise 2 (nächste Woche!) I) Eulerkreise Def. 3 Sei G ein (un-)gerichteter Graph. Ein Eulerkreis (-weg ) in G ist ein Kreis (Weg), der jede Kante genau einmal durchläuft. 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. 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] 3 Basel 1707 – St. Petersburg 1783 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] Altstadt Pregel Kneiphof 3 Basel 1707 – St. Petersburg 1783 Vorstadt Alter Pregel Lohmse Neuer Pregel 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] Altstadt Pregel Kneiphof 3 Basel 1707 – St. Petersburg 1783 Vorstadt Alter Pregel Lohmse Neuer Pregel 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] Altstadt Pregel Kneiphof 3 Basel 1707 – St. Petersburg 1783 Vorstadt Alter Pregel Lohmse Neuer Pregel 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 A 3 Basel 1707 – St. Petersburg 1783 B D 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 Ist dieser (Multi-) Graph eulersch? 3 Basel 1707 – St. Petersburg 1783 A B D 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. Geburtsstunde der Graphentheorie! Königsberger Brückenproblem [Euler, 1741] C Ist dieser (Multi-) Graph eulersch? 3 Basel 1707 – St. Petersburg 1783 A B D 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. Geburtsstunde der Graphentheorie! Königsberger Brückenproblem [Euler, 1741] C Ist dieser (Multi-) Graph eulersch? 3 Basel 1707 – St. Petersburg 1783 A B Angenommen ja. D 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 Ist dieser (Multi-) Graph eulersch? 3 Basel 1707 – St. Petersburg 1783 A B Geburtsstunde der Graphentheorie! Angenommen ja. ⇒ Es gibt einen Eulerkreis K. D 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? 3 Basel 1707 – St. Petersburg 1783 A B Geburtsstunde der Graphentheorie! ⇒ Es gibt einen Eulerkreis K. D 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? 3 Basel 1707 – St. Petersburg 1783 A B Geburtsstunde der Graphentheorie! ⇒ Es gibt einen Eulerkreis K. D 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? 3 Basel 1707 – St. Petersburg 1783 A B Geburtsstunde der Graphentheorie! ⇒ Es gibt einen Eulerkreis K. D 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? 3 Basel 1707 – St. Petersburg 1783 A B Geburtsstunde der Graphentheorie! ⇒ Es gibt einen Eulerkreis K. D Aber deg D = 3, also ungerade. 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? 3 Basel 1707 – St. Petersburg 1783 A B Geburtsstunde der Graphentheorie! ⇒ Es gibt einen Eulerkreis K. D Aber deg D = 3, also ungerade. Satz von Euler für ungerichtete Graphen Satz. 4 Sei G ein ungerichteter und zshg. Graph. Dann gilt: Satz von Euler für ungerichtete Graphen Satz. 4 Sei G ein ungerichteter und zshg. Graph. Dann gilt: G eulersch ⇔ alle Knoten haben geraden Grad. Satz von Euler für ungerichtete Graphen Satz. 4 Sei G ein ungerichteter und zshg. Graph. Dann gilt: G eulersch ⇔ alle Knoten haben geraden Grad. 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. ” 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. ” ⇐“ ” 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. ” ⇐“ Sei v0 ∈ V . ” 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. ” v0 ⇐“ Sei v0 ∈ V . ” 4 G 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 v1 G ⇐“ Sei v0 ∈ V . Wähle einen Nachbarn v1 ∈ Adj[v0 ]. ” 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. ” v0 v1 G ⇐“ Sei v0 ∈ V . Wähle einen Nachbarn v1 ∈ Adj[v0 ]. ” Markiere die Kante v0 v1 als gebraucht. 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 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. 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 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 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 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 . 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 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 . 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. 4 Alle Knotengrade gerade ⇒ vk = v0 ,. d.h. K := hv0 , v1 , . . . , vk−1 , v0 i ist Kreis. 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. 4 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. 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 G ⇐“ Im Restgraphen (V, E \ E(K)) haben alle Kno” ten 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 G ⇐“ Im Restgraphen (V, E \ E(K)) haben alle Kno” ten geraden Grad.– aber er muss nicht zshg. sein! 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 G ⇐“ Im Restgraphen (V, E \ E(K)) haben alle Kno” ten geraden Grad.– aber er muss nicht zshg. sein! Wie würden Sie den Beweis zu Ende bringen? Diskutieren Sie mit Ihren NachbarInnen! 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 G ⇐“ Im Restgraphen (V, E \ E(K)) haben alle Kno” ten geraden Grad.– aber er muss nicht zshg. sein! Durchlaufe K noch einmal. 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! 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. 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! 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. 5 Durchlaufe weiter den neuen Kreis K (bis v0 ). 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! 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. 5 Durchlaufe weiter den neuen Kreis K (bis v0 ). 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! 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. 5 Durchlaufe weiter den neuen Kreis K (bis v0 ). 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. 5 Durchlaufe weiter den neuen Kreis K (bis v0 ). 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. Eulerkreis, ganz schnell Satz. 6 Sei G = (V, E) ein ungerichteter und zshg. Graph. Eulerkreis, ganz schnell Satz. 6 Sei G = (V, E) ein ungerichteter und zshg. Graph. (i) Man kann in O(E) Zeit testen, ob G eulersch ist. 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. 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. 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: 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 . 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 . 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 Reihenfolge unbenutzt; falls alle zu v inzidenten Kanten entsprechend Adj[v]! benutzt sind, sei curr[v] = nil . 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 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] 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 6 curr[v] Gesamtanzahl Zeigeränderungen 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 6 curr[v] Gesamtanzahl Zeigeränderungen P = v∈V deg v 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 6 curr[v] Gesamtanzahl Zeigeränderungen P = v∈V deg v = 2|E| 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 6 curr[v] Gesamtanzahl Zeigeränderungen P = v∈V deg v = 2|E| Satz von Euler für gerichtete Graphen Satz. Sei G ein ungerichteter und zshg. Graph. Dann: G eulersch 7 ⇔ Satz von Euler für gerichtete Graphen Satz. 7 Sei G ein ungerichteter und zshg. Graph. Dann: für jeden Knoten v gilt: G eulersch ⇔ deg v gerade. Satz von Euler für gerichtete Graphen Satz. 7 schwach | {z } ? Sei G ein ungerichteter und zshg. Graph. Dann: für jeden Knoten v gilt: G eulersch ⇔ deg v gerade. Satz von Euler für gerichtete Graphen Satz. schwach | {z } ? Sei G ein ungerichteter und zshg. Graph. Dann: für jeden Knoten v gilt: G eulersch ⇔ deg v gerade. 7 ? ) Der unterliegende ungerichtete Graph ist zusammenhängend. Satz von Euler für gerichtete Graphen Satz. 7 schwach | {z } ? Sei G ein ungerichteter und zshg. Graph. Dann: für jeden Knoten v gilt: G eulersch ⇔ deg v gerade. Satz von Euler für gerichtete Graphen Satz. 7 schwach | {z } ? Sei G ein ungerichteter und zshg. Graph. Dann: für jeden Knoten v gilt: G eulersch ⇔ indeg v = outdeg v. 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. 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. 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. 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. 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. Kosten fürs Zeigerbewegen: 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 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|. 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|. 7 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 8 1805 Dublin – 1865 Dunsink (c) 2002 James Dalgety, The Puzzle Museum A Voyage Round the World Frage: 9 Ist das Skelett des Dodekaeders hamiltonsch? A Voyage Round the World Frage: Ist das Skelett des Dodekaeders hamiltonsch? Antwort: Ja! 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 :-) 9 Bad News Satz. 10 [Karp, 1972] Bad News Satz. 10 [Karp, 1972] (Un)gerichteter Hamiltonkreis und -weg sind NP-schwer. Bad News Satz. [Karp, 1972] (Un)gerichteter Hamiltonkreis und -weg sind NP-schwer. Beweis. SAT ist NP-schwer [Cook, 1971] 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 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 – lässt sich (in Polynomialzeit) reduzieren auf“ ” – ist höchstens so schwer wie“ ” 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? 10 – lässt sich (in Polynomialzeit) reduzieren auf“ ” – ist höchstens so schwer wie“ ” 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. 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. 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. 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. 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. 10 Satz von Bondy und Chvátal [1976] Satz. 11 Sei G = (V, E) ein ungerichteter Graph mit |V | ≥ 3. Seien u und v nicht-adjazente Knoten von G mit deg u + deg v ≥ n := |V |. Dann gilt: G hamiltonsch ⇔ G + uv hamiltonsch. Satz von Bondy und Chvátal [1976] Satz. 11 Sei G = (V, E) ein ungerichteter Graph mit |V | ≥ 3. Seien u und v nicht-adjazente Knoten von G mit deg u + deg v ≥ n := |V |. Dann gilt: G hamiltonsch ⇔ G + uv hamiltonsch. Satz von Bondy und Chvátal [1976] Satz. 11 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. Satz von Bondy und Chvátal [1976] Satz. Beweis. 11 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. Satz von Bondy und Chvátal [1976] Satz. 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. Beweis. ⇒“ Jeder HK in G ist auch ein HK in G + uv. ” 11 Satz von Bondy und Chvátal [1976] Satz. 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. Beweis. ⇒“ Jeder HK in G ist auch ein HK in G + uv. ” 11 Satz von Bondy und Chvátal [1976] Satz. 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. Beweis. ⇒“ Jeder HK in G ist auch ein HK in G + uv. ” ⇐“ O.B.d.A. benutzt jeder HK in G + uv Kante uv. ” 11 Satz von Bondy und Chvátal [1976] Satz. 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. Beweis. ⇒“ 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. 11 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Beweis. v2 u v vn−1 11 vn−2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E Beweis. v2 u v vn−1 11 vn−2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E Beweis. v2 u v vn−1 11 vn−2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u v vn−1 11 vn−2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u v vn−1 11 vn−2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u Es gilt |A| = degG v − 1 v vn−1 11 vn−2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u Es gilt |A| = degG v − 1 und |B| = degG u − 1. v vn−1 11 vn−2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u v vn−1 11 vn−2 Es gilt |A| = degG v − 1 und |B| = degG u − 1. ⇒ |A| + |B| = degG v + degG u − 2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u v vn−1 11 vn−2 Es gilt |A| = degG v − 1 und |B| = degG u − 1. ⇒ |A| + |B| = degG v + degG u − 2 ≥ Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u v vn−1 11 vn−2 Es gilt |A| = degG v − 1 und |B| = degG u − 1. ⇒ |A| + |B| = degG v + degG u − 2 ≥ n − 2 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u v vn−1 11 vn−2 Es gilt |A| = degG v − 1 und |B| = degG u − 1. ⇒ |A| + |B| = degG v + degG u − 2 ≥ n − 2 aber |A ∪ B| ≤ n − 3 Satz von Bondy und Chvátal [1976] Satz. 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. K v3 Betrachte A = i ∈ {3, . . . , n − 1} | uvi ∈ E und B = i ∈ {3, . . . , n − 1} | vvi−1 ∈ E . Beweis. v2 u v vn−1 11 vn−2 Es gilt |A| = degG v − 1 und |B| = degG u − 1. ⇒ |A| + |B| = degG v + degG u − 2 ≥ n − 2 aber |A ∪ B| ≤ n − 3 ⇒ es gibt ein i ∈ A ∩ B. Satz von Bondy und Chvátal [1976] Satz. ⇒“ ” ⇐“ ” K v3 vi−1 Beweis. v2 u v vn−1 11 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 v − 1 und |B| = degG u − 1. vn−2 ⇒ |A| + |B| = degG v + degG u − 2 ≥ n − 2 aber |A ∪ B| ≤ n − 3 ⇒ es gibt ein i ∈ A ∩ B. 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 v − 1 und |B| = degG u − 1. vn−1 vn−2 ⇒ |A| + |B| = degG v + degG u − 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. 11 Satz von Dirac Satz. 12 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. 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. 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! 12