Eulersche Graphen - Zentrum für Angewandte Informatik der

Werbung
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
Herunterladen