Vorlesung Diskrete Strukturen Eulersche und Hamiltonsche Graphen

Vorlesung Diskrete Strukturen Eulersche und Hamiltonsche Graphen Bernhard Ganter WS 2013/14 1 Eulersche Graphen Kantenzug Ein Kantenzug in einem Gr...
Author: Gudrun Busch
9 downloads 2 Views 850KB Size
Vorlesung Diskrete Strukturen Eulersche und Hamiltonsche Graphen Bernhard Ganter WS 2013/14

1

Eulersche Graphen

Kantenzug Ein Kantenzug in einem Graphen (V, E) ist eine Folge (a0 , a1 , . . . , an ) von Knoten mit der Eigenschaft, dass f¨ ur alle i ∈ {0, 1, . . . , n − 1} die aufeinanderfolgenden Knoten {ai , ai+1 } eine Kante bilden. Ein Kantenzug (a0 , . . . , an ) heißt offen, falls a0 6= an ist und anderenfalls geschlossen. (Im Unterschied zum Weg m¨ ussen die Knoten in einem Kantenzug nicht paarweise verschieden sein.) Ein Kantenzug, in dem jede Kante des Graphen genau einmal auftritt und der alle Knoten durchl¨auft, wird eine Eulersche Linie genannt. Das Haus vom Nikolaus

1

Eulersche Linien Welche Figuren lassen sich in einem Zug zeichnen, d.h. ohne den Stift abzusetzen? Diese Frage kann in die Sprache der Graphendiagramme u ¨bersetzt werden und lautet dann: Welche Graphen besitzen eine Eulersche Linie? Diese Frage wurde als das K¨ onigsberger Br¨ uckenproblem bekannt und 1736 von Leonhard Euler beantwortet. Eulers Ergebnis Satz 1 (Euler 1736). Ein endlicher Graph besitzt genau dann eine geschlossene Eulersche Linie, wenn er zusammenh¨ angend ist und jeder seiner Knoten geraden Grad hat. Ein endlicher Graph besitzt genau dann eine offene Eulersche Linie, wenn er zusammenh¨ angend ist und genau zwei Knoten ungeraden Grades hat. Zu diesem Satz geben wir einen Beweis und einen Algorithmus an. 2

Beweisvorbereitung (1) Notation: Ist Z := (a0 , a1 , . . . , an ) ein Kantenzug, dann soll V (Z) die Menge der in Z auftretenden Knoten und E(Z) die Menge der in Z auftretenden Kanten bezeichnen. Der folgende Hilfssatz ist offensichtlich: Hilfssatz 1. Ist Z := (a0 , a1 , . . . , an ) ein Kantenzug, in dem keine Kante zweimal vorkommt, dann ist jeder der Knoten a1 , a2 , . . . , an−1 in gerade vielen Kanten aus E(Z) enthalten. Die Knoten a0 und an kommen beide in ungerade vielen Kanten des Kantenzuges vor, wenn a0 6= an ist, und in gerade vielen, wenn der Kantenzug geschlossen ist. Beweisvorbereitung (2) Hilfssatz 2. Haben alle Knoten eines (endlichen) Graphen geraden Grad, dann ist jeder maximale Kantenzug, der keine Kante zweimal enth¨ alt, geschlossen.

Beweis. Jeder offene Kantenzug Z := (a0 , a1 , . . . , an ), der keine Kante zweimal enth¨ alt, enth¨ alt ungerade viele Kanten durch an . Das k¨onnen nicht alle Kanten sein, die an enthalten, denn an hat geraden Grad. Also kann der Kantenzug nicht maximal sein. Beweisteil 1 Zu beweisen ist: Ein Graph, der eine geschlossene Eulersche Linie besitzt, ist zusammenh¨ angend und alle seine Knoten haben geraden Knotengrad. Beweis: Weil vorausgesetzt wurde, dass eine Eulersche Linie alle Knoten durchl¨ auft, muss ein solcher Graph zusammenh¨angend sein. Ein beliebiger Knoten v ∈ V des Graphen kommt nach dem ersten Hilfssatz in gerade vielen Kanten des Kantenzuges vor. Da der Kantenzug alle Kanten des Graphen enth¨ alt, ist also der Knotengrad von v gerade. Beweisteil 2 Zu beweisen ist: Ein zusammenh¨ angender endlicher Graph, in dem alle Knoten geraden Grad haben, besitzt eine geschlossene Eulersche Linie. Beweis: W¨ ahle einen beliebigen Knoten a0 des Graphen (der Fall des 3

leeren Graphen ist trivial). Betrachte einen Kantenzug (a0 , a1 , . . . , an ). Nach dem Hilfssatz Wir d¨ urfen E 6= ∅ annehmen. Nach der Vor¨ uberlegung enth¨alt (V, E) dann einen Kreis und damit einen nichtleeren geschlossenen Kantenzug, der jede Kante h¨ ochstens einmal durchl¨auft. Sei Z ein solcher Kantenzug maximaler Kantenanzahl. Wenn Z alle Kanten des Graphen enth¨alt, sind wir fertig. Beweisteil 2, Fortsetzung Wenn der maximale Kantenzug Z nicht alle Kanten enth¨alt, dann gibt es eine Kante, die nicht zu Z geh¨ort. Weil (V, E) zusammenh¨angend ist, muss es sogar eine solche Kante geben, die mit dem Kantenzug einen Knoten gemeinsam hat, sagen wir u. Der Graph (V, E \ E(Z)), also der Graph, der entsteht, wenn man den Kantenzug Z in (V, E) l¨ oscht, hat ebenfalls nur Knoten von geradem Grad. Deshalb gibt es einen geschlossenen Kantenzug durch u in (V, E \ E(Z)), der jede Kante h¨ ochstens einmal enth¨alt. Dieser Kantenzug kann beim Durchlaufen des Knotens u in Z eingeschoben werden, im Widerspruch zur Maximalit¨ at von Z. Beweisteil 3: Offene Eulersche Linien Ist (V, E) ein endlicher zusammenh¨angender Graph mit genau zwei Knoten u, v von ungeradem Grad, und ist w ∈ / V , dann ist (V ∪ {w}, E ∪ {{u, w}, {w, v}}) ein endlicher zusammenh¨angender Graph, in dem alle Knoten geraden Grad haben. Nach dem, was wir bereits bewiesen haben, muss dieser Graph eine geschlossene Eulersche Linie besitzen. Streicht man darin den Knoten w und die beiden Kanten durch w, so erh¨alt man eine offene Eulersche Linie in (V, E). Umgekehrt sind die genannten Bedingungen (endlich, zusammenh¨angend, genau zwei Knoten von ungeradem Grad) offenbar notwendig f¨ ur die Existenz einer offenen Eulerschen Linie. Quod erat demonstrandum.

Existenz und Konstruktion

4

Wir haben (u.a.) einen Existenzbeweis gef¨ uhrt, der nachweist, dass unter den genannten Bedingungen eine Eulersche Linie existiert. Ein solcher Beweis ist nicht notwendig konstruktiv, d.h., er gibt keinen Algorithmus an, eine Eulersche Linie tats¨achlich zu konstruieren. Wie findet man eine Eulersche Linie? Einfach losmarschieren f¨ uhrt nicht sicher zum Ziel, wie nebenstehendes Beispiel zeigt. Alle Voraussetzungen sind erf¨ ullt: Der Graph ist zusammenh¨angend, endlich und alle Knoten haben geraden Grad.

Ein Algorithmus zur Konstruktion einer Eulerschen Linie Der folgende Algorithmus konstruiert zu jedem endlichen zusammenh¨angenden Graphen (V, E), in dem alle Knotengrade gerade sind, eine geschlossene Eulersche Linie. Unter einer Bru ¨ cke in einem Graphen versteht man eine Kante, deren Wegnahme die Anzahl der Zusammenhangskomponenten erh¨oht. 1. Starte in einem beliebigen Knoten a0 , setze i := 0 und Z0 := (a0 ). 2. Ist Zi := (a0 , . . . , ai ) bereits konstruiert, verfahre wie folgt: • Wenn Zi alle Kanten des Graphen durchl¨auft, stopp. • Ansonsten w¨ ahle eine Kante {ai , w} ∈ / E(Zi ). Wenn es m¨ oglich ist, w¨ahle diese Kante so, dass sie keine Br¨ ucke im Graphen (V, E \ E(Zi )) ist. • Setze i ← i + 1, ai := w und Zi := (a0 , . . . , ai ). 3. Iteriere (2). Funktioniert das? Es ist gar nicht klar, dass der angegebene Algorithmus zum gew¨ unschten Ergebnis f¨ uhrt. Ja, es ist nicht einmal klar, dass er u uhrbar ist. ¨berhaupt durchf¨ Betrachten wir z.B. Schritt (2). Dort heißt es: 5

• Wenn Zi alle Kanten des Graphen durchl¨auft, stopp. • Ansonsten w¨ ahle eine Kante {ai , w} ∈ / E(Zi ) . . . Aber wieso muss es eine solche Kante u ¨berhaupt geben? Offenbar ist es erforderlich, einen sorgf¨altigen Korrektheitsbeweis f¨ ur diesen Algorithmus anzugeben. Korrektheitsbeweis (1) Zu beweisen ist, dass der Algorithmus durchf¨ uhrbar ist und zu einer Eulerschen Linie f¨ uhrt. Offensichtlich ist, dass f¨ ur alle i die konstruierte Folge Zi ein Kantenzug ist, in dem wegen {ai , w} ∈ / E(Zi ) keine Kante zweimal vorkommt. Da der Algorithmus erst stoppt, wenn Zi alle Kanten von (V, E) durchl¨auft, muss das Ergebnis eine (geschlossene) Eulersche Linie sein. Zu beweisen ist also nur, dass der Algorithmus durchf¨ uhrbar ist, also dass immer dann, wenn der konstruierte Kantenzug Zi = (a0 , . . . , ai ) nicht alle Kanten durchl¨ auft, noch eine Kante {ai , w} ∈ / E(Zi ) existiert. Korrektheitsbeweis (2) Nehmen wir also an, der Kantenzug Zi = (a0 , . . . , ai ) sei nach den Regeln des Algorithmus konstruiert, es sei E(Zi ) 6= E, aber es g¨abe keine Kante {ai , w} ∈ / E(Zi ). Weil ai geraden Knotengrad hat, muss es auch gerade viele Kanten in E(Zi ) geben, die ai enthalten. Das erzwingt ai = a0 . a0 ist deshalb ein Knoten, der in keiner Kante aus E \ E(Zi ) vorkommt.

Es kann nicht sein, dass alle aj , 0 ≤ j ≤ i, diese Eigenschaft haben. Sonst w¨ are n¨ amlich {a0 , . . . , ai } eine nicht triviale Zusammenhangskomponente des Graphen (V, E). Es muss also eine Kante {aj , b} ∈ E \ E(Zi ) geben.

6

Verschnaufpause Weil die Sache so langsam un¨ ubersichtlich wird, veranschaulichen wir das bisher Erreichte. Der Algorithmus hat einen geschlossenen Kantenzug (a0 , a1 , . . . , ai ) konstruiert, der nicht alle Kanten enth¨ alt. Es gibt eine Kante {aj , b}, die nicht zum Kantenzug geh¨ ort, und wir d¨ urfen annehmen, dass der Index j dabei gr¨oßtm¨oglich gew¨ahlt wurde und ungleich i ist. Was nun gezeigt wird ist, dass beim Schritt von j auf j + 1 ein Fehler gemacht wurde: Die Kante {aj , aj+1 } h¨ atte nicht gew¨ahlt werden d¨ urfen, weil sie eine Br¨ ucke ist, die Kante {aj , b} aber nicht! Korrektheitsbeweis (3) Im Schritt j des Algorithmus ist der kantenzug Zj := (a0 , . . . , aj ) konstruiert und es wird der Graph (V, E \ E(Zj ) betrachtet, die blauen Kanten fehlen also. Weil j der h¨ ochste Index ist, f¨ ur den es eine Kante {aj , b} gibt, die nicht zum Kantenzug geh¨ort, ist {aj , aj+1 } eine Br¨ ucke. Die Kante {aj , b} ist deshalb keine Br¨ ucke, weil in dieser Zusammenhangskomponente des Graphen (V, E \ E(Zj )) alle Knoten geraden Grad haben. Ein mit {aj , b} beginneder Kantenzug kann fortgesetzt werden, bis er aj wieder erreicht. Es muss deshalb eine zweite Kante {aj , c} in der gleichen Komponente geben.

a0 = ai aj+1 a1 aj b a2

a0 = ai aj+1 a1 aj b a2

Korrektheitsbeweis (Schluss) Wir haben beweisen: Der Algorithmus liefert einen geschlossenen Kantenzug, in dem jede Kante h¨ochstens einmal vorkommt. Wenn dieser Kantenzug nicht alle Kanten enth¨alt, muss bei der Durchf¨ uhrung ein Fehler gemacht worden sein. Bei korrekter Durchf¨ uhrung liefert der Algorithmus also eine geschlossene Eulersche Linie.

7

In dem bereits zitierten Buch von Krumke und Noltemeier findet man auch eine Untersuchung der Komplexit¨ at. Das Bestimmen einer Eulerschen Linie in einem Eulerschen Graphen mit n Konten und m Kanten ist in O(m + n) Schritten m¨ oglich.

Nachbemerkungen Der Algorithmus liefert f¨ ur endliche zusammenh¨angende Graphen, in denen alle Knotengrade gerade sind, einen Kantenzug, der jede Kante genau einmal durchl¨ auft. Diese Aufgabe stellt sich in vielen Zusammenh¨angen auch dann, wenn die Voraussetzung nicht erf¨ ullt ist (Postbote, M¨ ullabfuhr, Google Street View). Dazu gibt es zahlreiche Untersuchungen. Man kann den Algorithmus problemlos auf Multigraphen (bei denen es zwischen zwei Knoten mehr als eine Kante geben darf) erweitern. Damit l¨ost man solche Probleme sogar mit zus¨atzlichen Bedingungen (Kostenfunktion).

2

Hamiltonsche Graphen

Eine scheinbar ganz ¨ ahnliches Problem Als Eulersche Linie in einem zusammenh¨angenden Graphen bezeichnet hatten wir einen Kantenzug bezeichnet, der jeden Kante genau einmal durchl¨ auft. Einen geschlossenen Kantenzug, der alle Knoten genau einmal durchl¨auft, nennt man einen hamiltonschen Kreis, einen offenen Kantenzug, der alle Knoten genau einmal durchl¨auft, einen offenen hamiltonschen Weg. Einen Graphen, der einen Hamiltonschen Kreis enth¨alt, nennt man hamiltonsch. Das TSP Verallgemeinert man auf Graphen mit (positiv) gewichteten Kanten, so stellt sich das Problem des Handlungsreisenden (engl.: Travelling Salesman Problem, TSP).

8

Gesucht ist dabei ein gewichtsminimaler hamiltonscher Kreis.

Quelle: Thore Husfeldt (Wikipedia)

Griechenland

Die nebenstehende Graphik zeigt eine k¨ urzeste Tour durch 9882 Ortschaften in Griechenland. Das Bild stammt aus der Bibliothek von www.tsp.gatech.edu ‘‘The Traveling Salesman Problem is one of the most intensively studied problems in computational mathematics.’’

xkcd

9

Satz 2 (Stirling–Formel). n! =



   n n  1 2πn · · 1+O . e n

Wie kann man erkennen, ob ein Graph hamiltonsch ist? Es gibt viele hinreichende Bedingungen. Offenbar ist der vollst¨ andige Graph mit n Knoten hamiltonsch f¨ ur jedes n ≥ 3. Satz 3 (Bondy und Chv´ atal). Es sein (V, E) ein Graph mit n ≥ 3 Knoten. u und v seien zwei nicht adjazente Knoten mit deg(u) + deg(v) ≥ n. Dann gilt: Der Graph (V, E ∪ {{u, v}}), der aus (V, E) entsteht, indem man die Kante {u, v} hinzunimmt, ist genau dann hamiltonsch, wenn (V, E) hamiltonsch ist. Beweis der nicht trivialen Richtung Falls es in (V, E ∪{{u, v}}) einen hamiltonschen Kreis gibt, der die Kante {u, v} nicht enth¨ alt, dann enth¨alt auch (V, E) diesen Kreis. Wir nehmen an, dass jeder hamiltonsche Kreis in (V, E ∪ {{u, v}}) die Kante {u, v} benutzt. (a0 , a1 , . . . , an−1 , a0 ) sei ein solcher Kreis und o.B.d.A. sei a0 = u und an−1 = v. Wir betrachten die Mengen A := {1 ≤ i ≤ n − 3 | {v, ai } ∈ E} B := {1 ≤ i ≤ n − 3 | {u, ai+1 } ∈ E}.

10

Dann gilt |A| ≥ deg(v) − 1 und |B| ≥ deg(u) − 1. Da A, B ⊆ {1, . . . , n − 3} und |A| + |B| ≥ deg(v) + deg(u) − 2 ≥ n − 2 gilt, muss es ein i ∈ A ∩ B geben, also mit {v, ai } ∈ E und {u, vi } ∈ E. (u = a0 , ai , . . . ai−1 , v, an−1 . . . , ai , u) ist dann hamiltonscher Kreis. Als Korollar: Ein Satz von Dirac Satz 4 (Dirac). Sei (V, E) ein Graph mit n ≥ 3 Knoten, von denen jeder Knotengrad ≥ n2 hat. Dann ist (V, E) hamiltonsch. Das folgt sofort aus dem folgenden allgemeineren Satz: Satz 5. Sei (V, E) ein Graph mit n ≥ 3 Knoten, in dem f¨ ur je zwei nicht adjazente Knoten u und v gilt, dass deg(v) + deg(v) ≥ n ist. Dann ist (V, E) hamiltonsch. Dieser wiederum folgt m¨ uhelos aus dem Satz von Bondy und Chv´atal. Charakterisierung Die genannten Bedingungen sind hinreichend, aber nicht notwendig. Eine leicht u ufbare Bedingung, die notwendig und hinreichend daf¨ ur ¨berpr¨ ist, dass ein Graph hamiltonsch ist, ist nicht bekannt. Es gibt auch keinen bekannten Algorithmus, der schnell u ufen kann, ¨berpr¨ ob ein eingegebener Graph hamiltonsch ist oder nicht. Satz 6. Das Entscheidungsproblem, ob ein beliebiger vorgelegter Graph hamiltonsch ist, ist N P-vollst¨ andig.

11