Graphentheorie Eulersche Graphen Rainer Schrader Zentrum für Angewandte Informatik Köln 14. November 2007 1 / 22 2 / 22 Eulersche Graphen Eulersche Graphen Gliederung Zur Erinnerung: • eulersche und semi-eulersche Graphen • Charakterisierung eulerscher Graphen • Berechnung eines Euler-Pfads D A C B • Frage: Ist es möglich, einen Rundgang so zu machen, dass man jede Brücke genau einmal passiert und zum Ausgangspunkt zurückkehrt? 3 / 22 4 / 22 Eulersche Graphen Eulersche Graphen • ein zusammenhängender Graph heißt semi-eulersch, wenn ein Pfad • offensichtlich ist nicht jeder Graph eulersch, auch nicht jeder v0 , v1 , . . . , vk existiert, der alle Kanten genau einmal durchläuft semi-eulersche Graph • der Graph heißt eulersch, wenn ein semi-eulerscher Pfad existiert mit v0 = vk 1 3 • das Königsberger-Brücken-Problem besteht dann darin, für den folgenden Graphen zu entscheiden, ob er eulersch (bzw. semi-eulersch) ist: 2 4 9 10 12 8 9 2 6 5 1 10 11 6 7 7 8 c D 5 3 4 • das folgende Lemma liefert die Basis für die Charakterisierung A eulerscher Graphen C d b B a 5 / 22 6 / 22 Eulersche Graphen Eulersche Graphen Gliederung Lemma 1 Sei G ein Graph mit d (v ) ≥ 2 für alle v ∈ V . Dann enthält G einen Kreis. • eulersche und semi-eulersche Graphen • Charakterisierung eulerscher Graphen • Berechnung eines Euler-Pfads Beweis: (i) G enthält eine Schlinge oder Mehrfachkanten √ (ii) G ist einfach: konstruiere eine Kantenfolge v0 , v1 , . . . wie folgt: wähle v0 ∈ V beliebig, wähle vi +1 ∈ N (vi ) r vi −1 • da |V | < ∞, muss irgendwann ein Knoten zum zweiten Mal erreicht werden. 7 / 22 8 / 22 Eulersche Graphen Eulersche Graphen • nach dem vorigen Lemma 1 enthält G einen Kreis C Satz 2 Ein zusammenhängender Graph ist genau dann eulersch, wenn d (v ) gerade ist für alle v ∈ V . • falls C schon alle Kanten von G enthält, ist die Behauptung bewiesen Beweis: • es ist |E (H )| < |E (G)| und d (v ) gerade für alle v ∈ V (H ) • andernfalls betrachte H = G r C • sei P ein geschlossener eulerscher Pfad • damit folgt per Induktion: • dann wird jeder Knoten genau so oft verlassen wie erreicht und • jede Komponente von H hat einen geschlossenen eulerschen Pfad, jedesmal auf verschiedenen Kanten • zusammen mit C ergeben diese einen geschlossenen eulerschen • daher ist d (v ) gerade Pfad von G. • sei umgkehrt G ein Graph mit d (v ) gerade für alle v ∈ V • wir führen eine Induktion über |E | durch • da G zusammenhängend ist, folgt d (v ) ≥ 2 für alle v ∈ V • nach dem vorigen Lemma 1 enthält G einen Kreis C 9 / 22 10 / 22 Eulersche Graphen Eulersche Graphen Als Folgerung aus dem letzten Satz ergibt sich: • damit enthält er entweder keine Knoten mit ungeradem Grad oder zwei Korollar 3 • umgekehrt ist der Graph nach Satz Satz 2 entweder eulersch (und Ein zusammenhängender Graph ist genau dann eulersch, wenn er Vereinigung von kantendisjunkten Kreisen ist. damit semi-eulersch) • oder er wird eulersch, wenn wir einen neuen Knoten a hinzufügen, den wir mit den beiden ungeraden Knoten verbinden Korollar 4 • im letzten Fall sind die ungeraden Knoten in jedem geschlossenen Ein zusammenhängender Graph ist semi-eulersch genau dann, wenn die Anzahl der Knoten mit ungeraden Grad 0 oder 2 ist. Euler-Pfad direkte Nachbarn von a • wenn wir a und die beiden neuen Kanten entfernen, erhalten wir den gesuchten Euler-Pfad. Beweis: • ein semi-eulerscher Graph besitzt entweder einen geschlossenen eulerschen Pfad (d.h. er ist eulersch) oder einen normalen eulerschen Pfad 11 / 22 12 / 22 Eulersche Graphen Eulersche Graphen Gliederung Mit der gleichen Technik folgt: • eulersche und semi-eulersche Graphen • Charakterisierung eulerscher Graphen Korollar 5 Sei G ein zusammenhängender Graph und 2k die Anzahl der ungeraden Knoten. Dann lässt sich E in k kantendisjunkte Wege zerlegen. • Berechnung eines Euler-Pfads Beweis: • seien die ungeraden Knoten x1 , . . . , xk , y1 , . . . , yk • füge zu G neue Knoten a1 , . . . , ak mit Kanten (ai , xi ) und (ai , yi ) für 1 ≤ i ≤ k hinzu • der so entstandene Graph ist eulersch • wie vorher, kommen in jedem eulerschen Pfad die Kanten (ai , xi ), (ai , yi ) direkt nacheinander vor • entfernen wir diese Kanten, so erhalten wir die gewünschte Zerlegung. 13 / 22 14 / 22 Eulersche Graphen Eulersche Graphen Beispiel: • der Beweis von Satz 2 liefert einen Algorithmus zur Bestimmung eines eulerschen Pfades • betrachte den folgenden Eulerschen Graphen • die einzige Schwierigkeit, die es zu beachten gibt, ist die folgende: v • sei Gk der Teilgraph der Kanten, die wir nach k Schritten noch nicht durchlaufen haben u w • sei x der aktuelle Knoten • die Konstruktion beginne in Knoten u • und wählt die Kanten (u, v ) und (v , w ) x v • wir müssen vermeiden, eine Schnittkante zu wählen, da wir sonst nicht w u mehr in die Zusammenhangskomponente zurückkommen • es sei denn, dGk (x ) = 1. • danach darf nicht die Kante (w , u) gewählt werden 15 / 22 16 / 22 Bestimmung eines Euler-Pfades Bestimmung eines Euler-Pfades Bestimmung eines Euler-Pfads (Fleury) (1) (2) (3) (5) (4) (5) (4) (6) (7) Satz 6 Der von dem obigen Algorithmus erzeugte Pfad ist eulersch. wähle eine beliebigen Startknoten a folge einem Kantenzug, der keine Kante zweimal benutzt sei x der im Schritt k erreichte Knoten sei Gk der von den unbenutzten Kanten induzierte Teilgraph falls x 6= a und dGk (x ) > 1 : verlasse x niemals auf einer Schnittkante von Gk falls x = a: verlasse a auf einer unbenutzten Kante, falls keine solche existiert, Stop. Beweis: (1) die Regeln können eingehalten werden: • sei x 6= a der erreichte Knoten • da dG (x ) gerade, ist dGk (x ) ungerade • somit existiert immer eine Kante in Gk , die mit x inzidiert • ist dGk (x ) = 1, so kann x auf dieser Kante verlassen werden • ist dGk (x ) > 1, so existiert mindestens eine Kante, die nicht Schnittkante in Gk ist: 17 / 22 18 / 22 Bestimmung eines Euler-Pfades Bestimmung eines Euler-Pfades • andernfalls existieren zwei Schnittkanten in Gk , die x mit zwei (2) der in den ersten k Schritten erzeugte Graph ist der Anfang eines eulerschen Pfades: Komponenten C und D verbinden: • denn nach Erzeugen eines Knotens x 6= a existieren genau zwei Knoten (x und a) in Gk , die ungeraden Grad haben C • nach Korollar 4 existiert dann noch ein Pfad in Gk , der semi-eulersch ist. x D Der Algorithmus kann so implementiert werden, dass er eine lineare Laufzeit von O(|V | + |E |) hat. • dGk (x ) ist ungerade, die Anzahl der ungeraden Knoten in C aber gerade Wir beschreiben im folgenden eine rekursive Version zur Berechnung von • damit muss C noch einen weiteren ungeraden Knoten enthalten Euler-Touren: • entsprechend D • da Gk aber genau zwei Knoten mit ungeradem Grad hat (den Startknoten a und den Knoten x ), liefert dies einen Widerspruch. 19 / 22 20 / 22 Bestimmung eines Euler-Pfades Bestimmung eines Euler-Pfades rekursiver Algorithmus zur Bestimmung eines Euler-Kreiese • für das Chinese-Postman-Problem und andere Fragestellungen wird es (1) wähle ein v1 ∈ V beliebig (2) W = Euler(G, v1 ) (1) (2) (3) (4) von Interesse sein, einen Graphen G = (V , E ) durch Hinzufügen von Kanten eulersch zu machen Euler(G, v ) setze W = v und x = v falls δ(x ) = ∅ gehe zu (5) andernfalls wähle e = (x , y ) ∈ δ(x ) setze W = W , e, y und x = y • dazu benötigen wir noch einige andere Hilfsmittel, die wir in einem späteren Kapitel behandeln werden. setze E = E r e gehe zu (2) (5) sei W = v1 , e1 , v2 , e2 , . . . , vk , ek , vk +1 (6) für i = 1 bis k do (7) sei Wi = Euler(G, vi ) end do (8) setze W = W1 , e1 , W2 , e2 , . . . , Wk , ek , vk +1 (9) return 21 / 22 22 / 22