Master Informatik Graphentheorie Titel —————————————————————————————————————— Skript zur Vorlesung Graphentheorie —————————————————————————————————————— Hochschule Stralsund Fakultät Elektrotechnik und Informatik Prof. Dr. W. Kampowsky Vorlesungsmitschrift Graphentheorie 1 Beispiele für Graphen Beispiele für Graphen 1. Kreuzungsproblem : 3 Häuser sollen mit einem Wasser-, Gas- und Elektroanschluß verbunden werden, wobei keine Kreuzung entstehen darf. Abbildung 1: Kreuzungsproblem 2. Schachaufgabe mit einem Pferd : Das Pferd soll alle 64 Schachfelder einmal besuchen und zum Start zurückkehren. Diese Aufgabe ist ein sogenanntes Rundreiseproblem. Der spezielle Fall ist lösbar. 3. Königsberger Brückenproblem1 : Auf einem Rundweg soll jede Brücke genau einmal überquert werden. Dieser Fall ist nicht lösbar. Abbildung 2: Königsberger Brückenproblem 1 1736 formulierte Euler das Problem nach einem Spaziergang in Königsberg. 3 Vorlesungsmitschrift Graphentheorie Beispiele für Graphen 4. Das Haus des Nikolaus : Das Haus soll in einem Zug gezeichnet werden, ohne dass eine Kante doppelt gezeichnet wird. Abbildung 3: Das Haus des Nikolaus 5. Kannibalen und Missionare : Zwei Missionare und 2 Kannibalen sollen über den Fluß gebracht werden. Ein Missionar ( M1 ) und ein Kannibale ( K1 ) können rudern. Es gibt ein Boot, welches 2 Mann tragen kann. Sobald die Kannibalen in der Überzahl sind, fressen sie den Missionar. Wie gelangen alle über den Fluß bringen, ohne daß einer gefressen wird? In der Abbildung sind die Situationen am Ausgangsufer dargestellt. Abbildung 4: Kannibalen und Missionare 4 Vorlesungsmitschrift Graphentheorie Beispiele für Graphen 6. Umfüllaufgabe : Es gibt drei Gefäße ohne Maßeinteilung : das erste mit 8l, das zweite mit 5l und das letzte mit 3l Fassungsvermögen. Am Anfang ist das 8l-Gefäß vollständig gefüllt. Ziel ist es, 2 mal 4 Liter in zwei Gefäßen zu erhalten. Abbildung 5: Umfüllaufgabe Startknoten ist der Knoten (8,0,0). Der Zielknoten ist der Knoten (4,4,0). 7. Labyrinth-Probleme : Abbildung 6: Wegfindung in einem Labyrinth 5 Vorlesungsmitschrift Graphentheorie 2 Grundbegriffe der Graphentheorie Grundbegriffe der Graphentheorie Definition : Ein Graph G besteht aus einer Menge X von Knoten ( Punkte, Ecken ) und aus einer Menge K von Kanten ( Bögen ), d.h. G = (X, K). Generell werden endliche Graphen betrachtet, wobei |X| = n und |K| = m. 2.1 Gerichtete Graphen Es gibt 2 Projektionsfunktionen: p1 : K ⇒ X p2 : K ⇒ X wobei p1 (k) Anfangsknoten der Kante k und p2 (k) Endknoten der Kante k ist. Häufig : p(k) := {p1 (k), p2 (k)} ( Menge der Knoten der Kante k ) Beispiel : Dabei ist z.B.: p1 (k1 ) = x3 , p2 (k1 ) = x1 , p(k1 ) = {x3 , x1 } 6 Graph Vorlesungsmitschrift Graphentheorie Grundbegriffe der Graphentheorie Definitionen : • ein Knoten x und eine Kante k heißen inzident, falls x ∈ p(k) inzident • zwei Kanten k1 und k2 heißen adjazent, falls p(k1 ) ∩ p(k2 ) = ∅ adjazent • zwei Knoten x1 und x2 heißen adjazent, falls ∃k, p(k) = {x1 , x2 } adjazent • neben Schlingen können auch parallele Kanten auftreten Schlingen parallele Kanten x (a) Schlinge (b) Parallele Kanten • häufig sind die betrachteten Graphen schlicht , d.h. sie besitzen keine Schlingen und keine parallelen Kanten schlicht • Weiter Charakterisierung durch den sogenannten Grad: 1. äußerer Grad (positiv) d+ (x) : Anzahl der Kanten k mit x = p1 (k) äußerer Grad 2. innerer Grad (negativ) d− (x) : Anzahl der Kanten k mit x = p2 (k) innerer Grad 3. Grad d(x) = d+ (x) + d− (x) : Anzahl der mit x inzidenten Kanten Grad • ein Punkt x mit d(x) = 0 heißt isolierter Knoten isolierter Knoten • ein Graph heißt vollständig, wenn jedes Paar verschiedener Knoten durch eine Kante verbunden ist 7 vollständiger Graph Vorlesungsmitschrift Graphentheorie Grundbegriffe der Graphentheorie Aussagen : + − 1. x∈X d (x) = x∈X d (x) = |K| 2. x∈X d(x) = 2|K| 3. Die Anzahl der Knoten mit einem ungeradem Grad ist gerade. Beweis zu Aussage 3 : 1) Xu ⊆ X, Xu Menge der Knoten mit ungeraden Grad d(x) + d(x) ⇒ d(x) ist gerade 2) 2|K| = x∈X x∈X x∈X\Xu u u gerade gerade 3) Für x ∈ Xu : d(x) = 2lx + 1 = ungerade 4) d(x) = (2lx + 1) = 2 lx + |Xu | x∈Xu x∈Xu x∈Xu gerade! gerade gerade gerade Nachbarschaftsbeziehungen Passend zu den Grad-Definitionen sind die Nachbarschaftsbeziehungen eines Knoten x: • die Menge der Nachfolger von x : Γ+ (x) = {y ∈ X | ∃k ∈ K : p1 (k) = x, p2 (k) = y} • die Menge der Vorgänger von x : Γ− (x) = {y ∈ X | ∃k ∈ K : p1 (k) = y, p2(k) = x} • die Menge der Nachbarn von x : Γ(x) = Γ+ (x) ∪ Γ− (x) 8 Vorlesungsmitschrift Graphentheorie 2.2 Grundbegriffe der Graphentheorie Ungerichtete Graphen Beispiel : Dabei ist z.B.: p(5) = {2, 4} Eigenschaften : • Beschreibung durch die Projektionsfunktion p(k) = {Knoten von k} • Inzidenz, Adjazenz, Schlingen, Parallelkanten – wie bisher • Halbgrade, Vorgänger und Nachfolger – entfallen jetzt • Grad, Nachbarn – wie bisher Definition : Ein Graph G heißt regulär vom Grade r , wenn d(x) = r regulärer Graph ∀x ∈ X. Beispiel für r = 2 : Dreieck; r = 3 : Pyramide, Würfel; r = 4 : Oktaeder. (a) Dreieck (b) Pyramide (c) Oktaeder 9 Vorlesungsmitschrift Graphentheorie 2.3 Grundbegriffe der Graphentheorie Teilgraphen, Kantenzüge, Wege und Kreise Die Beschreibung der Kanten durch die beiden Knoten bringt die Möglichkeit K ⊆ X × X, d.h. k = (x1 , x2 ) ist ein geordnetes Paar mit Anfangsknoten x1 und Endknoten x2 . Für ungerichtete Graphen ist K ⊆ X & X, d.h. k = {x1 , x2 } wird als ungeordnetes Paar aufgefasst. Teilgraphen : Definition : Ein Graph G = (X , K ) heißt Teilgraph von G = (X, K), wenn X ⊆ X und K ⊆ K ist. Symbol : G ⊆ G. Spezialfälle : Teilgraph 1. Gegeben ist Y ⊆ X. Es ist X = Y , K = {k ∈ K | p(k) ⊆ Y } ist die neue Kantenmenge. Der Teilgraph GY := (X , K ) heißt der durch Y erzeugte (Knoten-)Teilgraph von G. 2. Gegeben ist H ⊆ K. Es ist K = H, X = k∈K p(k) ist die neue Knotenmenge. Der Teilgraph GH := (X , K ) heißt der durch H erzeugte (Kanten-)Teilgraph von G. Kantenzüge, Wege und Kreise : Sei G = (X, K) ein (un-)gerichteter Graph, H ⊆ K ⊆ H = {k1 = X×X X&X mit (x0 , x1 ) (x1 , x2 ) (xr−1 , xr ) , k2 = , . . . , kr = } {x0 , x1 } {x1 , x2 } {xl−1 , xl } Diese Folge von aufeinanderfolgenden Kanten heißt Kantenzug der Länge r von x0 nach xr , der offen ist, fall x0 = xr ist, oder geschlossen ist, wenn x0 = xr ist. Der Kantenzug H kann auch durch seine Spur s(H) = (x0 , x1 , x2 , . . . , xr ) charakterisiert werden. 10 Kantenzug Vorlesungsmitschrift Graphentheorie Grundbegriffe der Graphentheorie Sonderfall 1 : Enthält ein Kantenzug H alle Kanten von G genau einmal, so heißt H Eulerscher Kantenzug. Gibt es in G sogar einen geschlossenen Eulerschen Kantenzug, dann ist G ein Eulerscher Graph. Eulerscher Kantenzug Sonderfall 2 : Sind in einem Kantenzug alle xi mit i = 0, 1, 2, . . . , r verschieden, so heißt H auch Weg in G von x0 nach xr der Länge r. Gilt zusätzlich x0 = xr , so heißt H auch Kreis in G der Länge r. Weg Sonderfall 2.1 : Enthält ein Weg ( Kreis ) H alle Knoten von G, so heißt H auch Hamiltonscher Weg ( Kreis ). Ein Graph, der einen Hamiltonschen Kreis enthält, heißt auch Hamiltonscher Graph. Eigenschaften : 1. Schlingen sind Kreise der Länge 1. In schlichten Graphen haben Kreise die Länge r ≥ 3 bei ungerichteten Graphen bzw. r ≥ 2 bei gerichteten Graphen. 2. Jeder offene Kantenzug von x0 nach xr enthält einen Weg von x0 nach xr . Jeder geschlossene Kantenzug enthält einen Kreis. 3. Gerichtete Graphen mit d+ (x) > 0 ∀x ∈ X bzw. d− (x) > 0 ∀x ∈ X besitzen stets einen Kreis. 4. Sei ein Kreis H mit s(H) = (x0 , x1 , x2 , . . . , xr ) in einem Graphen G gegeben, dann existiert ebenfalls ein Kreis H’ mit s(H ) = (xi , xi+1 , . . . , xr , x1 , x2 , . . . , xi ), wobei 1 ≤ i ≤ r − 1. 11 Eulerscher Graph Kreis Hamiltonscher Weg Hamiltonscher Graph Vorlesungsmitschrift Graphentheorie 2.4 Grundbegriffe der Graphentheorie Zusammenhänge in Graphen, Baum, Distanz 1. Ein ungerichteter Graph kann stets in einen gerichteten Graphen umgewandelt werden, indem jede ungerichtete Kante durch zwei entgegengesetzt gerichtete Kanten ersetzt werden. 2. Ein gerichteter Graph enthält einen ungerichteten Graphen dadurch, daß die Richtungen der Kanten weggelassen werden. 3. Ein ungerichteter Graph heißt zusammenhängend , wenn jedes Paar verschiedener Knoten durch mindestens einen Weg verbunden werden können. Ein gerichteter Graph heißt stark zusammenhängend , wenn jedes Paar verschiedener Knoten durch mindestens einen Weg verbunden werden können. Ein gerichteter Graph heißt schwach zusammenhängend , wenn der zugehörige ungerichtete Graph zusammenhängend ist. 4. Die starken bzw. schwachen Zusammenhangskomponenten eines Graphen sind die maximalen stark bzw. schwach zusammenhängenden Teilgraphen. Beispiel : Abbildung 7: Zusammenhangskomponenten Der Graph ist an sich schwach zusammenhängend, besitzt aber 3 starke Zusammenhangskomponenten ( die in sich stark zusammenhängend sind ). 12 zusammenhängend stark zusammenhängend schwach gend zusammenhän- Zusammenhangskomponenten Vorlesungsmitschrift Graphentheorie Grundbegriffe der Graphentheorie Definition : Ein zusammenhängender ungerichteter Graph, der kreisfrei ist, heißt Baum. Baum Beispiel : Abbildung 8: Baum Definition : Die Distanz D(x, y) zwischen zwei verschiedenen Knoten eines Graphen ist die Länge eines kürzesten Weges von x nach y, falls ein solcher existiert, sonst D(x, y) := ∞. Außerdem ist D(x, x) := 0. Es gilt D(x, y) < ∞, wenn x und y zur gleichen Zusammenhangskomponente ( bei gerichteten Graphen : zur gleichen starken Zusammenhangskomponente ) gehören. 13 Distanz Vorlesungsmitschrift Graphentheorie 2.5 Grundbegriffe der Graphentheorie Der Satz von Euler Satz : Ein gerichteter, schwach zusammenhängender Graph G = (X, K) ist genau dann ein Eulerscher Graph, wenn d+ (x) = d− (x) ∀x ∈ X . Bemerkung : Bei ungerichteten Graphen muß d(x) gerade für alle x ∈ X sein. Diese Eigenschaft ist beim Königsberger Brückenproblem verletzt. Beweis ( für gerichtete Graphen ) : ⇒“ ” 1. Es gibt einen geschlossenen Eulerschen Kantenzug GEK in G. Da G schwach zusammenhängend ist, muß GEK alle Knoten von X enthalten. 2. Durchläuft man GEK , so liefert jeder Durchgang durch einen Knoten x ∈ X +1 für d+ (x) und +1 für d− (x). Am Ende, wenn alle Kanten durchlaufen sind, muß d+ (x) = d− (x) ∀x ∈ X sein. ⇐“( Induktionsbeweis über m = |K| ) ” Induktionsanfang und Induktionsvoraussetzung: 1. m = 1 : Schlinge 2. m > 1 : Jeder schwach zusammenhängende Graph G mit |K| < m und d+ (x) = d− (x) ∀x ∈ X besitze einen geschlossenen Eulerschen Kantenzug. Induktionsbehauptung : Sei nun G ein schwach zusammenhängender Graph mit |K| = m und d+ (x) = d− (x) ∀x ∈ X. Induktionsbeweis : Es gilt : d+ (x) > 0 ∀x ∈ X. Dann besitzt G einen Kreis H = {k1 , k2, . . . , kl }. 14 Satz von Euler Vorlesungsmitschrift Graphentheorie Grundbegriffe der Graphentheorie 1. Fall : H = K. Dann ist G ein Eulerscher Graph. 2. Fall : H = K. Dann sei K = K \H und G = (X , K ) der durch K erzeugte Graph. In G gilt : d+ (x) = d− (x) ∀x ∈ X . Mit Herausnahme von H wurde d+ (x) und d− (x) eventuell um 1 gleichzeitig reduziert. Seien Z1 , Z2, . . . , Zp die schwachen Zusammenhangskomponenten von G . p = 1 : G ist schwach zusammenhängend. Nach der Induktionsvoraussetzung hat G einen geschlossenen Eulerschen Kantenzug H . Wegen des schwachen Zusammenhanges von G müssen H und H einen gemeinsamen Knoten haben, so daß H und H zu einem geschlossenen Eulerschen Kantenzug vereinigt werden können. p > 1 : Jetzt besitzt jede schwache Zusammenhangskomponente Zi nach der Induktionsvoraussetzung einen geschlossenen Eulerschen Kantenzug Hi . Wegen des schwachen Zusammenhanges müssen H und Hi mindestens einen gemeinsamen Knoten besitzen. Die Hi werden der Reihe nach mit H vereinigt. Im unteren Beispiel erfolgt dies durch den Kantenzug : (x0 , H1 , x0 x1 x2 , H2 , x2 x3 x4 x5 , H3 , x5 , x6 , H4 , x6 x7 x0 ) . Abbildung 9: Beweis des Satzes von Euler 15 Vorlesungsmitschrift Graphentheorie 3 Speicherung von Graphen Speicherung von Graphen Ein Graph G = (X, K) mit X = {x1 , x2 , . . . , xn } und K = {k1 , k2, . . . , km } soll abgespeichert werden. 3.1 Darstellung durch Matrizen Adjazenzmatrix : Definition : Adjazenzmatrix A als quadratische Matrix mit ⎧ ⎨1 falls (xi ,xj ) ∈ K {xi ,xj } A = (aij )i,j=1,...,n mit aij = ⎩0 sonst Adjazenzmatrix Bemerkung : • parallele Kanten sind problematisch ( z.B. kann die Anzahl der Kanten abgespeichert werden ) • bei ungerichteten Graphen wird A symmetrisch Inzidenzmatrix : Definition : Inzidenzmatrix B = (bij )i=1,...,n mit Inzidenzmatrix j=1,...,m ⎧ ⎪ falls xi = p1 (kj ) ⎪ ⎨1 bij = −1 falls xi = p2 (kj ) ⎪ ⎪ ⎩ 0 sonst 1 falls xi ∈ p(kj ) bij = 0 sonst (gerichteter Graph) (ungerichteter Graph) Bemerkung : Schlingen sind problematisch 16 Vorlesungsmitschrift Graphentheorie Speicherung von Graphen Beispiel für gerichteten Graphen : ⎛ ⎜ ⎜ ⎜ ⎜ A=⎜ ⎜ ⎜ ⎜ ⎝ 0 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ⎞ ⎛ ⎟ ⎟ ⎟ ⎟ ⎟, ⎟ ⎟ ⎟ ⎠ ⎜ ⎜ ⎜ ⎜ B=⎜ ⎜ ⎜ ⎜ ⎝ 1 1 −1 0 0 0 0 −1 0 0 −1 −1 0 0 0 0 1 1 0 1 0 0 −1 0 0 1 −1 0 0 0 0 0 0 0 −1 0 0 0 0 0 0 1 ⎞ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ Bemerkung der Autoren : Bei der Adjazenzmatrix A repräsentiert jede Spalte einen Endknoten x, also x1 bis x6 , analog jede Zeile einen Anfangsknoten. ⎛ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ A=⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ 0 0 1 0 0 0 ↑ x1 1 0 1 1 0 0 ↑ x2 0 0 0 0 0 0 ↑ x3 1 0 1 0 0 0 ↑ x4 0 0 0 0 0 1 ↑ x5 0 0 0 0 0 0 ↑ x6 ← x1 ← x2 ← x3 ← x4 ← x5 ← x6 ⎞ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ Bei der Inzidenzmatrix B repräsentiert jede Spalte eine Kante k, also k1 bis k7 . Jede Zeile repräsentiert einen Knoten x, also x1 bis x6 . In jeder Spalte stehen eine 1 für den Anfangsknoten und eine −1 für den Endknoten. ⎛ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ B=⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ 1 1 −1 −1 0 0 0 0 1 0 −1 0 0 0 0 0 0 0 ↑ ↑ ↑ k1 k2 k3 0 0 0 0 −1 −1 0 0 1 0 1 0 0 1 −1 0 0 0 0 −1 0 0 0 1 ↑ ↑ ↑ ↑ k4 k5 k6 k7 ← x1 ← x2 ← x3 ← x4 ← x5 ← x6 ⎞ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ 17 Vorlesungsmitschrift Graphentheorie 3.2 Speicherung von Graphen Darstellung mit Listen Nachfolgerliste und zugehörige Indexliste : Zu jedem Knoten wird die Liste der Nachfolger gespeichert. Beispiel : 1 2 3 4 5 6 → → → → → → Nachfolgerliste 2, 4 leer 1, 2, 4 2 leer 5 Die Nachfolger werden in der Reihenfolge der Knoten aneinander gehängt : j nf[j] 1 2 2 4 3 1 4 2 5 4 6 2 7 5 Die Nachfolgerliste nf hat bei gerichteten Graphen die Länge m = |K|. Bei ungerichteten Graphen verdoppelt sich die Länge auf 2m = 2|K|. Durch Kenntnis des positiven Halbgrades d+ (i) bzw. des Grades d(i) kann die Liste nf wieder in die Teillisten aufgeteilt werden. Nützlich ist die folgende Indexliste der Länge n + 1 = |X| + 1 : i inf[i] 1 1 2 3 3 3 4 6 5 7 6 7 7 8 Es gilt bei dieser Festlegung : d+ (i) = inf[i + 1] − inf[i] d(i) = inf[i + 1] − inf[i] (gerichteter Graph) (ungerichteter Graph) Die Nachfolger des Knotens xi sind nun folgende : nf[j] mit j = inf[i], . . . , inf[i + 1] − 1 18 Indexliste Vorlesungsmitschrift Graphentheorie Speicherung von Graphen Kantenlisten : Zu jeder Kante werden die Knoten gespeichert. Für obiges Beispiel : i ap[i] ep[i] 1 1 2 2 1 4 3 3 1 4 3 2 5 4 2 6 3 4 Kantenliste 7 6 5 wobei i die Kante ki , ap der Anfangsknoten der Kante ki und ep der Endknoten der Kante ki sind. Bemerkungen : 1. Anstelle einer Nachfolgerliste nf und der zugehörigen Indexliste inf kann auch mit einer Vorgängerliste plus Indexliste gearbeitet werden. 2. Es ist nützlich, die Kanten wie folgt zu nummerieren : (a) Knoten 1 : alle dort ausgehenden Kanten erhalten die Nummern 1, 2, . . . , j1 (b) Knoten 2 : alle dort ausgehenden Kanten erhalten die Nummern j1 + 1, . . . , j2 (c) usw. Folgerung : • Vom Knoten xi gehen jetzt die Kanten mit den Nummern inf[i],. . . , inf[i + 1] − 1 aus • Die Nachfolgerliste stimmt mit der Endpunktliste überein 19 Vorlesungsmitschrift Graphentheorie 3.3 Speicherung von Graphen Algorithmus zum Richten eines Graphen Gegeben ist ein ungerichteter Graph G(X, K) der Länge |K| = m, der mittels einer Kantenliste ap und ep definiert ist. Gesucht ist der zugehörige gerichteter Graph G (X, K ), der durch die Nachfolgerliste nf und zugehörige Indexliste inf definiert ist. Richten eines Graphen Schritte: 1. Bestimmung von d(i) 2. Bestimmung von inf 3. Bestimmung von nf Listing 1: Richten“eines ungerichteten Graphen ” 1 VAR N , M : i n t e g e r; 2 3 4 5 TYPE PListe = ARRAY [1.. N +1] OF i n t e g e r; KListe = ARRAY [1.. M ] OF i n t e g e r; K G L i s t e = ARRAY [1..2* M ] OF i n t e g e r; 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 P R O C E D U R E R i c h t e n ( AP , EP : KListe ; inf ,D , H : PLISTE ; nf : K G L i s t e ) VAR i ,j ,k , l : i n t e g e r; BEGIN // S c h r i t t 1 : Grad der Knoten e r m i t t e l n FOR i :=1 TO N DO D [ i ]:=0; FOR k :=1 TO M DO BEGIN i := AP [ k ]; D [ i ]:= D [ i ]+1; i := EP [ k ]; D [ i ]:= D [ i ]+1; END ; // S c h r i t t 2 : I n d e x l i s t e e r s t e l l e n inf [ 1 ] : = 1 ; FOR i :=1 TO N DO inf [ i +1]:= inf [ i ] + D [ i ]; // S c h r i t t 3 : N a c h f o l g e r l i s t e e r s t e l l e n FOR i :=1 TO N DO H [ i ]:= inf [ i ]; FOR k :=1 TO M DO BEGIN i := AP [ k ]; j := EP [ k ]; l := H [ i ]; nf [ l ]:= j ; H [ i ]:= H [ i ] + 1 ; / / Hin - Kante l := H [ j ]; nf [ l ]:= i ; H [ j ]:= H [ j ] + 1 ; / / Zurueck - Kante END ; END ; 20 Vorlesungsmitschrift Graphentheorie 4 Färbung in Graphen Färbung in Graphen Definition : Eine zulässige Färbung ist eine Färbung der Knoten des ( ungerichteten ) Graphen, so daß je zwei adjazente Knoten verschiedene Farben haben. Trivial ist, daß n verschiedene Farben immer eine zulässige Färbung sind ( Anzahl Knoten = Anzahl Farben ). Definition : Die chromatische Zahl eines Graphen G ist die kleinste Anzahl von Farben für eine zulässige Färbung. Symbol : χ(G) Beispiele : 1. Polyeder : χ(G = Würfel) = 2, χ(G = Tetraeder) = 4 (a) Würfel (b) Tetraeder Abbildung 10: Färbung von Polyedern 2. Färbung eines Graphen : χ(G) = 4 21 zulässige Färbung chromatische Zahl Vorlesungsmitschrift Graphentheorie Färbung in Graphen 3. Färben einer Landkarte : Eine Landkarte ist ein planarer Graph2 . Die Knoten sind durch die Länder gegeben. 2 Knoten werden durch eine Kante verbunden, wenn die Länder eine gemeinsame Grenze haben. Abbildung 11: Färbung einer Landkarte Jede Landkarte kann mit vier Farben zulässig gefärbt werden ( Vierfarbensatz ) 4. Party mit n Gästen : Die Gäste stellen die Knoten dar. Jede Kante zwischen zwei Knoten bedeutet, daß die jeweiligen zwei Gäste nicht miteinander harmonieren. Gesucht ist eine zulässige Färbung des Graphen, die einer Verteilung der Gäste auf verschiedene Tische ohne Disharmonien entspricht. Einfache Aussagen : 1. Für einen vollständigen Graphen G mit n Knoten gilt : χ(G) = n 2. Für einen Kreis G mit gerader Länge gilt : χ(G) = 2 3. Für einen Kreis G mit ungerader Länge gilt : χ(G) = 3 2 in der Ebene ohne Überschneidungen der Kanten darstellbar 22 Vierfarbensatz Vorlesungsmitschrift Graphentheorie 4.1 Färbung in Graphen Färbung mit 2 Farben Satz : Ein Graph G = (X, K) hat eine zulässige Färbung mit 2 Farben ⇔ G hat keinen Kreis mit ungerader Länge. Beweis : ⇒“: trivial ( siehe Aussage 3 ) ” ⇐“: ” In jeder Zusammenhangskomponente von G wird folgendermaßen gefärbt : 1. Wähle x0 aus der Knotenmenge der Zusammenhangskomponente beliebig. Alle Knoten y mit Distanz D(x0 , y) = gerade erhalten die Farbe F1 . Alle Knoten y mit Distanz D(x0 , y) = ungerade erhalten die Farbe F2 . 2. Noch zu zeigen : 2 adjazente Knoten x1 und x2 haben nicht die gleiche Farbe. Indirekter Beweis : Annahme : x1 und x2 seien adjazent und haben die gleiche Farbe F1 ( oder F2 ). kürzester Weg von x0 nach x1 kürzester Weg von x0 nach x2 Kante von x1 nach x2 : : : gerade ( ungerade ) Länge gerade ( ungerade ) Länge Länge 1 Der Weg von x0 über x1 und x2 und zurück zu x0 ist offenbar stets ein Kreis ungerader Länge ! Zwei-Farben-Algorithmus Algorithmus : Beginne mit einem beliebigen Knoten x0 aus X. Bilde sukzessive um x0 konzentrische Schalen gleichgefärbter Knoten, solange dies möglich ist. Die Schalen enthalten genau die Knoten gleicher Distanz von x0 . Eine zulässige Färbung ist möglich, wenn in keiner Schale adjazente Knoten existieren. Gegeben sei ein ungerichteter zusammenhängender Graph G = (X, K) mittels Nachfolgerliste nf der Länge 2m und zugehöriger Indexliste inf der Länge n + 1. Außerdem ist ein Startknoten x0 ∈ X mittels des Indexes i0 gegeben. Gesucht ist die Entscheidung, ob eine zulässige Färbung mit 2 Farben möglich ist. Falls ja, Angabe der Färbung der Knoten mittels farbe. 23 Vorlesungsmitschrift Graphentheorie Färbung in Graphen Listing 2: Zwei-Farben-Algorithmus 1 2 3 VAR N ,M , I0 : i n t e g e r; TYPE PListe = array [1.. N +1] OF i n t e g e r; KListe = array [1..2* M ] OF i n t e g e r; 4 5 6 7 8 9 P R O C E D U R E Z w e i F a r b e n ( nf : KListe ; inf , Farbe , D : PListe ); VAR i ,j ,k , Dakt , F a r b e A k t : i n t e g e r; unfaerbbar : b o o l e a n; BEGIN FOR i :=1 TO N DO D [ i ]:= -1; 10 11 12 D [ I0 ]:=0; Dakt :=0; Farbe [ I0 ]:=0; u n f a e r b b a r := false ; F a r b e A k t :=0; // A n f a n g s i n i t i a l i s i e r u n g 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 REPEAT FOR i :=1 TO N DO BEGIN IF D [ i ] = Dakt THEN BEGIN FOR j := inf [ i ] TO inf [ i +1] -1 DO BEGIN k := nf [ j ]; IF D [ k ] = -1 THEN BEGIN D [ k ]:= Dakt +1; Farbe [ k ]:=1 - F a r b e A k t; END ELSE IF D [ k ] = Dakt THEN u n f a e r b b a r := TRUE ; END ; END ; END ; Dakt := Dakt +1; F a r b e A k t :=1 - F a r b e A k t; UNTIL ( Dakt = N ) OR ( u n f a e r b b a r ); END ; 24 Vorlesungsmitschrift Graphentheorie Färbung in Graphen Beispiel : 1 2 3 4 5 Nachfolgerliste : j nf[j] 1 2 2 1 3 3 4 5 i Index- und Färbeliste : inf[i] farbe[i] 5 2 1 1 6 4 → → → → → 7 3 2 3 4 2 5 7 gesucht 2 1, 3, 5 2, 4 3, 5 2, 4 8 5 9 2 5 9 10 4 6 11 Die Abarbeitung des Zwei-Farben-Algorithmus liefert folgende Lösung: i farbe[i] 1 0 2 1 3 0 4 1 5 0 25 Vorlesungsmitschrift Graphentheorie 4.2 Färbung in Graphen Maximalgrad und Greedy-Algorithmus Definition : Der Maximalgrad eines Graphen G ist definiert durch Maximalgrad δ(G) := max d(xi ). i=1,2,...,n Offensichtlich gilt: χ(G) ≤ δ(G) + 1 . Eine zulässige Färbung mit höchstens δ(G) + 1 Farben ermittelt der Greedy-Algorithmus : Greedy-Algorithmus Schritte : 1. x1 ∈ X erhält Farbe 0; i = 2 2. x1 , x2 , . . . , xi−1 ∈ X seien bereits gefärbt (a) Betrachte die in Γ(xi ) ∩ {x1 , x2 , . . . , xi−1 } vergebenen Farben j1 , j2 , . . . , jr (b) xi erhält die Farbe ji = min({0, 1, 2, . . . , δ(G)} \ {j1 , j2 , . . . , jr }) (c) i := i + 1 3. Solange i < n + 1 fahre mit Schritt 2 fort. 26 Vorlesungsmitschrift Graphentheorie Färbung in Graphen Beispiel : Der Greedy-Algorithmus benötigt fünf Farben, um den obigen Graphen zulässig zu färben. Durch Vertauschen der Knotennummern 10 und 12 wird eine Farbe weniger benötigt. Eine eventuell günstigere Knotennummerierung kann durch den folgenden Algorithmus erreicht werden : 1. i := n, Gi := G 2. Ermittle in Gi einen Knoten xi mit minimalem Grad di. (a) Bilde Gi−1 dadurch, daß xi und alle inzidenten Kanten entfernt werden (b) i := i − 1 3. Solange i > 0, setze in Schritt 2 fort. Der Greedy-Algorithmus liefert jetzt eine zulässige Färbung mit höchstens δ (G) + 1 Farben, wobei δ (G) := maxi=1,2,...,n d (xi ). 27 Vorlesungsmitschrift Graphentheorie Färbung in Graphen Für obiges Beispiel : i 1 2 3 4 5 6 7 8 9 10 11 12 xi xi di 1 12 2 2 11 2 3 10 2 4 9 2 5 8 1 6 7 2 7 4 2 8 3 1 9 2 1 10 6 2 11 1 0 12 5 1 (a) Ausgangsfärbung (b) Färbung nach Neunummerierung Also reichen sogar 3 Farben für eine zulässige Färbung. Bemerkung : Es gibt eine Nummerierung der Knoten, so daß der GreedyAlgorithmus zu einer zulässigen Färbung mit χ(G) Farben führt. 28 Vorlesungsmitschrift Graphentheorie Färbung in Graphen Backtracking-Algorithmus : 1. x1 , x2 , . . . , xi−1 seien zulässig gefärbt, dann (a) wird xi zunächst mit der ersten Farbe gefärbt, (b) verträgt sich diese Farbe mit den bereits gefärbten Nachbarn von xi , so geht man zu xi+1 , (c) wenn nicht, dann wird die nächste Farbe für xi überprüft, (d) sind alle c Farben für xi mit negativem Resultat überprüft, so geht man zu xi−1 zurück und ändert die Farbe für xi−1 . 2. Nach Abarbeitung von 1. tritt eine der folgenden Situationen ein: (a) man erreicht den letzten Knoten xn , kann diesen zulässig färben und hat damit eine zulässige Färbung des Graphen mit höchstens c Farben gefunden, (b) man steht wieder am Anfang des Algorithmus, was bedeutet, dass eine zulässige Färbung des Graphen mit c Farben nicht möglich ist (alle Möglichkeiten wurden durchprobiert). Beispiel : (a) Graph G (b) c = 2 (c) c = 3 Abbildung 12: Backtracking-Algorithmus Für c = 2 entsteht ein Farbänderungsverlauf mit dem Ergebnis, daß eine zulässige Färbung mit 2 Farben nicht möglich ist. Für c = 3 entsteht ein gültiger Farbänderungsverlauf und somit eine zulässige Färbung. 29 Vorlesungsmitschrift Graphentheorie 4.3 Färbung in Graphen Das Vier-Farben-Problem, der Fünf-Farben-Satz Graphentheoretisch lautet das Vier-Farben-Problem : Jeder planare Graph G hat die chromatische Zahl χ(G) ≤ 4. Vier-Farben-Problem Historie des Vier-Farben-Problems : 1850 1976 in letzter Zeit Vermutung von de Morgan, über 125 Jahre ungelöst K. Appel, W. Hahen, ( H. Heesch ) : Betrachtung von ca. 1950 Arten von planaren Graphen, Computerlösung N. Robertson, D. Sanders, P. Seymow, R. Thomas : Vereinfachung des Beweises, Reduktion auf ca. 650 Fälle bisher kein Beweis ohne Computerhilfe Eulersche Polyederformel : Sei G ein zusammenhängender planarer Graph mit n Knoten, m Kanten und g Gebieten ( einschließlich des sog. Außengebietes ). Dann gilt : m + g =2 n − Knoten Kanten Gebiete Bemerkung : Aus einem Polyeder entsteht durch Projektion ein planarer Graph. (a) Polyeder (b) planarer Graph Abbildung 13: Projektion eines Polyeders auf einen planaren Graph Der Quader hat n = 8 Ecken, m = 12 Kanten und g = 6 Flächen; der planare Graph n = 8 Knoten, m = 12 Kanten und g = 6 Gebiete ( einschließlich des Außengebietes ). 30 Eulersche Polyederformel Vorlesungsmitschrift Graphentheorie Färbung in Graphen Beweis der Eulerschen Polyederformel : Induktionsanfang : für m = 0 folgt, daß n = 1 und g = 1 Induktionsvoraussetzung : für m > 0 sei die Behauptung richtig Induktionsbehauptung : die Eulersche Polyederformel ist richtig für einen zusammenhängenden planaren Graphen G mit m + 1 Kanten Induktionsbeweis : 1. Fall : G enthalte keinen Kreis. Dann muß g = 1 und n = m + 2 sein. Folglich : (m + 2) − (m + 1) + 1 = 2. 2. Fall : G enthalte einen Kreis. Es wird eine Kante aus dem Kreis entfernt. Dadurch verschmelzen zwei Gebiete. Nach Induktionsvoraussetzung gilt : n − m + (g − 1) = 2 ⇒ n − (m + 1) + g = 2 Aussagen : 1. Für einen planaren Graphen G mit n ≥ 3 Knoten gilt : m ≤ 3n − 6 2. In einem planaren Graphen G gibt es mindestens einen Knoten x mit d(x) ≤ 5. Beweis zu Aussage 1 : G sei zusammenhängend ( ansonsten für jede Zusammenhangskomponente ) 1. Fall : g = 1 ( d.h. G hat Baumstruktur ). Aus der Baumstruktur folgt, daß m = n − 1 sein muß. Für n ≥ 3 gilt sicher n − 1 ≤ 3n − 6. 2. Fall : g ≥ 2. Für ein Gebiet i in G ist die Länge li des umlaufendes Kreises ≥ 3. Somit ergibt sich : 2m = gi=1 li ≥ 3g. Wenn man nun die umgeformte Eulersche Polyederformel g = 2 − n − m einsetzt, ergibt sich folgende Abschätzung : 2m ≥ 6 − 3n + 3m und damit m ≤ 3n − 6. Beweis zu Aussage 2 : Für n ≤ 6 ist die Aussage klar. Sei nun n > 6 und d(x) ≥ 6 für alle x ∈ X angenommen. Dann gilt : 6n ≤ 2m, was im Widerspruch zu m ≤ 3n − 6 steht. 31 Vorlesungsmitschrift Graphentheorie Färbung in Graphen Fünf-Farben-Satz : Fünf-Farben-Satz 1879 zeigte A. Kempe einen Beweis für das Vier-Farben-Problem. 1890 entdeckte P. Heawood einen Fehler in diesem Beweis, der jedoch bei der Färbung mit 5 Farben nicht auftritt. Kempes Beobachtung ist die folgende : Sei G zulässig gefärbt. Für zwei Farben i, j wird definiert : Xij = {x ∈ X|x ist mit i oder j gefärbt} Gij = der durch Xij erzeugte Teilgraph Beispiel : 12 11 10 12 10 9 1 2 9 1 5 8 6 3 6 3 4 7 (a) Graph G 4 7 (b) Graph G13 mit getauschten Farben Z sei eine Zusammenhangskomponente von Gij . Nun werden in Z die Farben getauscht“: x wird mit der Farbe i gefärbt, falls x vorher mit der Farbe j ” gefärbt war, und umgekehrt. Die neue Färbung wird nach G übertragen. Die neue Färbung ist in G zulässig und die Anzahl der Farben bleibt gleich. Beim Beweis des Fünf-Farben-Satzes, dass jeder planare Graph mit 5 Farben zulässig gefärbt werden kann, wird dieser Farbentausch Kempes genutzt.. 32 Vorlesungsmitschrift Graphentheorie Färbung in Graphen Beweis des Fünf-Farben-Satzes: Induktionsanfang : für n = 1 trivial Induktionsvoraussetzung : für n sei die Behauptung richtig Induktionsbeweis : Sei G ein planarer Graph mit n + 1 Knoten, Sei x ∈ X ein Knoten mit d(x) ≤ 5. Sei G der durch X \ {x} erzeugte Teilgraph von G. Nach der Induktionsvoraussetzung besitzt G eine zulässige Färbung mit 5 Farben. 1. Fall : Verwenden die Nachbarn von x nicht alle 5 Farben, so ist eine zulässige Färbung von G mit 5 Farben trivial. 2. Fall : Die 5 Nachbarn xi von x benutzen alle 5 Farben i, wobei i = 1, . . . , 5. Die Knoten xi laufen um x im Uhrzeigersinn. x1 x5 x2 x x3 x4 Ziel ist es, die Knoten x1 bis x5 mit 4 Farben zulässig färben. Es werden die Teilgraphen Gij mit 1 ≤ i, j ≤ 5 von G nach der Idee von Kempebetrachtet, konkret G13 . 1. Fall : Es gibt keinen Weg in G13 von x1 nach x3 . x1 liege in einer Zusammenhangskomponente Z von G13 . In Z werden die Farben 1 und 3 getauscht. Insgesamt bleibt eine zulässige Färbung von G erhalten. x1 und x3 sind jedoch beide mit der Farbe 3 gefärbt. Die Farbe 1 kann für x verwendet werden. x1 Z x5 x2 x x4 x3 33 Vorlesungsmitschrift Graphentheorie Färbung in Graphen 2. Fall : Es gibt einen Weg in G13 von x1 nach x3 . Zusammen mit x und den beiden Kanten von x nach x1 und x3 ergibt sich ein Kreis GK . x1 Gk x5 x2 x x3 x4 Jeder Weg von x2 nach x4 in G muß einen Knoten xK von GK benutzen. xK ist mit Farbe 1 oder 3 gefärbt. Somit liegen x2 und x4 in unterschiedlichen Zusammenhangskomponenten von G24 . Das heißt, auf G24 kann der 1. Fall angewendet werden. x1 Gk x5 x2 x xk x4 x3 34 Vorlesungsmitschrift Graphentheorie 5 Wegprobleme Wegprobleme 5.1 Erreichbarkeit Definition : xj heißt erreichbar von xi , wenn es einen Weg von xi nach xj gibt. Erreichbarkeit Welche Knoten xj sind von einem vorgegebenem Startkonten xi0 aus erreichbar und wie lautet ein entsprechender Weg von xi0 nach xj ? Gegeben : gerichteter Graph G = (X, K) mittels Nachfolgerliste nf und zugehöhriger Indexliste inf sowie der Startknoten xi0 Verfahren : 1. Markiere Startknoten xi0 ; i = i0 2. Wähle ein Kante (xi , xj ), wobei xi markiert ist und xj nicht markiert ist; xj wird nun markiert; wiederhole Schritt 2 Sinnvolle Markierungen : • Markierung von xj mit i ( xj wurde von xi aus erreicht ) • Markierung von xi0 mit n + 1 ( Kennzeichnung des Startknotens ) • Markierung von xj mit 0 (xj wurde noch nicht erreicht) Strategien für die Auswahl geeigneter Kanten : 1. DFS-Strategie ( Depth First Search, Tiefensuche ) DFS-Strategie Sobald ein Knoten markiert wird, versuche von diesem Knoten ausgehend einen weiteren zu markieren. Ist kein Knoten markierbar, versuche Gleiches mit dem zuvor markiertem Knoten. 2. BFS-Strategie ( Breath First Search, Breitensuche ) BFS-Strategie Falls von einem markierten Knoten xi aus Knoten markierbar sind, so markiere nacheinander alle diese von xi aus markierbaren Knoten. Eine zusätzliche Neunummerrierung der Knoten kann eingearbeitet werden : xi erhält die Nr. k , wenn xi als k-ter Knoten markiert wurde Technisch : NUM[k]:=i ( Es gilt immer: NUM[1]=i0. ) 35 Vorlesungsmitschrift Graphentheorie Wegprobleme Damit ist die Folge der neuen Nummern der Konten eines gefundenen Weges von xi0 aus immer aufsteigend. Listing 3: DFS-Algorithmus 1 2 3 VAR N ,M , i0 : i n t e g e r; TYPE PLISTE = array [1.. N +1] OF i n t e g e r; KLISTE = array [1.. M ] OF i n t e g e r; 4 5 6 7 P R O C E D U R E DFS ( nf : KLISTE ; inf , num , mar , H : PLISTE ); VAR i ,j ,k , l : i n t e g e r; LABEL Weiter ; 8 9 10 11 12 13 14 BEGIN FOR i :=1 TO N DO BEGIN num [ i ]:=0; mar [ i ]:=0; H [ i ] := inf [ i ]; END ; 15 16 17 18 19 num [1]:= i0 ; mar [ i0 ]:= N +1; l :=1; i := i0 ; 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 Weiter : k := H [ i ]; H [ i ]:= H [ i ]+1; IF k < inf [ i +1] THEN BEGIN j := nf [ k ]; IF mar [ j ]:=0 THEN BEGIN mar [ j ]:= i ; i := j ; l := l +1; num [ l ]:= j ; END ; IF l < N THEN GOTO Weiter ; END ELSE BEGIN i := mar [ i ]; IF i < N +1 THEN GOTO Weiter ; END ; END ; 36 Vorlesungsmitschrift Graphentheorie Wegprobleme Listing 4: BFS-Algorithmus 1 2 3 VAR N ,M , i0 : i n t e g e r; TYPE PLISTE = array [1.. N +1] OF i n t e g e r; KLISTE = array [1.. M ] OF i n t e g e r; 4 5 6 P R O C E D U R E BFS ( nf : KLISTE ; inf , num , mar : PLISTE ); VAR i ,j ,k ,l , m : i n t e g e r; 7 8 9 10 11 12 BEGIN FOR i :=1 to N DO BEGIN num [ i ]:=0; mar [ i ]:=0; END ; 13 14 15 16 17 num [1]:= i0 ; mar [ i0 ]:= N +1; l :=1; k :=1; 18 19 20 21 22 23 24 25 26 27 28 29 30 31 WHILE ( num [ k ] < > 0 ) AND ( l < N ) DO BEGIN i := num [ k ]; FOR j := inf [ i ] TO inf [ i +1] -1 DO BEGIN m := nf [ j ]; IF mar [ m ] = 0 THEN BEGIN mar [ m ]:= i ; l := l +1; num [ l ]:= m ; END ; END ; k := k +1; END ; END ; Beispiel : Gegeben ist der folgende Graph mit der Nachfolgerliste : j nf[j] 1 5 2 2 3 1 4 7 5 5 6 6 7 7 8 1 9 2 und der zugehörigen Indexliste : i inf[i] 1 1 2 2 3 2 4 4 5 6 6 7 7 8 8 10 37 Vorlesungsmitschrift Graphentheorie Wegprobleme 1 2 3 7 2 6 3 5 6 4 5 4 1 (a) Abarbeitung des DFS-Algorithmus, Startknoten ist x4 4 2 1 4 5 5 6 3 1 7 2 6 (b) Baum der Erreichbarkeit nach DFS 38 Vorlesungsmitschrift Graphentheorie Wegprobleme 1 2 4 7 2 5 3 6 6 3 5 4 1 (c) Abarbeitung des BFS-Algorithmus, Startknoten ist x4 (d) Baum der Erreichbarkeit nach BFS 39 Vorlesungsmitschrift Graphentheorie 5.2 Wegprobleme Kürzeste Wege Gegeben ist ein ( gerichteter ) Graph G = (X, K) mit einer Kantenbewertungsfunktion : l:K →R Gesucht sind die Antworten auf folgenden Fragen : 1. Ist xj von xi0 erreichbar ? 2. Welche Länge hat ein gerichteter Weg xi0 nach xj ? Antwort : 1. Die Erreichbarkeit wurde im Textabschnitt 5.1 beschrieben. 2. Die Länge eines Weges kann durch die Kantenbewertungsfunktion l ermittelt werden. Dazu wird zunächst der Weg W betrachtet : W = {(xi0 , xi1 ), (xi1 , xi2 ), . . . , (xir−1 , xir )}. xj Damit kann die Länge des Weges errechnet werden : Dl (W ) := l(xi0 , xi1 ) + l(xi1 , xi2 ) + . . . + l(xir−1 , xir ). Im Sinne dieser Weglänge ist ein kürzester Weg und seine Länge gesucht. 40 Vorlesungsmitschrift Graphentheorie Zunächst : l(k) ≥ 0 Wegprobleme ∀k ∈ K Gegeben sei ein gerichteter Graph G = (X, K) mit l(k) ≥ 0 ∀k ∈ K. Der Anfangsknoten sei xi0 . Gesucht ist ein kürzester Weg und seine Länge zu jedem von xi0 aus erreichbaren Knoten xj .3 Algorithmus von Dijkstra : 1. Setze Dl (xi0 , xj ) = ∞ für j = i0 und Dl (xi0 , xi0 ) = 0. Setze i = i0 und markiere xi . 2. Fixiere xi . Betrachte alle Knoten xj , zu denen es eine Kante von xi gibt. Berechne eine vorläufige Distanz : Dl (xi0 , xj ) := min{Dl (xi0 , xj ), Dl (xi0 , xi ) + l(xi , xj )} Fall A Fall B Die Markierung bleibt bestehen, sofern die Minimum-Funktion Fall A liefert, ansonsten wird xj mit i markiert ( Fall B ). 3. Unter allen nicht fixierten Knoten xj suche einen Knoten mit kleinster Distanz Dl (xi0 , xj ) < ∞. Dieser Knoten ist ein neuer Knoten xi . Wiederhole Schritt 2. 4. Gibt es keinen nicht fixierten Knoten xj mit Dl (xi0 , xj ) < ∞, so ist der Algorithmus beendet. 3 Zu beachten : Es kann auch mehrere kürzeste Wege geben ! 41 Algorithmus von Dijkstra Vorlesungsmitschrift Graphentheorie Wegprobleme Listing 5: Algorithmus von Dijkstra 1 2 3 4 5 VAR N ,M , i0 : i n t e g e r; TYPE PListe = ARRAY [1.. N +1] OF i n t e g e r; KListe = ARRAY [1.. M ] OF i n t e g e r; K B L i s t e = ARRAY [1.. M ] OF real ; DListe = ARRAY [1.. N ] OF real ; 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 P R O C E D U R E D I J K S T R A ( nf : Kliste ; inf , mar : PListe ; L : K B L i s t e ; DL : DListe ); CONST UNENDL = M A X R E A L; VAR i ,j , k : i n t e g e r; H : ARRAY [1.. N ] OF b o o l e a n; min , d0 : real ; BEGIN // I n i t i a l i s ie rung , S c h r i t t 1 des V e r f a h r e n s FOR i :=1 TO N DO BEGIN DL [ i ]:= UNENDL ; mar [ i ]:=0; H [ i ]:= false ; END ; DL [ i0 ]:=0; mar [ i0 ]:= N +1; min :=0; i := i0 ; 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 REPEAT // S c h r i t t 2 des V e r f a h r e n s H [ i ]:= true ; FOR j := inf [ i ] TO inf [ i +1] -1 DO BEGIN k := nf [ j ]; d0 := DL [ i ]+ L [ j ]; IF d0 < DL [ k ] THEN BEGIN DL [ k ]:= d0 ; mar [ k ]:= i ; END ; END ; // S c h r i t t 3 des V e r f a h r e n s min := UNENDL ; FOR j :=1 to N DO IF ( NOT ( H [ j ] ) ) AND ( DL [ j ] < min ) THEN BEGIN min := DL [ j ]; i := j ; END ; UNTIL ( min = UNENDL ) ; / / S c h r i t t 4 des V e r f a h r e n s END ; 42 Vorlesungsmitschrift Graphentheorie Wegprobleme Beispiel : 2 12 5 1 1 3 7 3 7 1 2 4 5 3 1 1 7 8 6 (a) Graph G mit Kantenbewertung (b) 1. Zyklus (c) 2. Zyklus (d) 3. Zyklus (e) 4. Zyklus (f) 5. Zyklus (g) 6. Zyklus (h) letzter Zyklus Abbildung 14: Dijkstra-Algorithmus 43 Vorlesungsmitschrift Graphentheorie Wegprobleme Bemerkung der Autoren : Der Dijkstra-Algorithmus ist recht einfach und kann gut nachvollzogen werden. Der gerichtete Graph G mit der Kantenbewertung ist in Abbildung 14(a) gegeben. Der Startknoten ist der Knoten 1. 1. Zyklus : der Knoten 1 wird fixiert ( Abbildung 14(b) ). Die Weglänge vom fixierten Knoten 1 zu seinen Nachfolgern ( Knoten 2, 3 und 4 ) wurden blau dargestellt. Alle anderen Knoten wurden mit einer Weglänge von ∞ festgelegt. Aus den nicht fixierten4 Knoten ( Knoten 2, 3 und 4 ) wird nun derjenige gesucht, dessen Weglänge minimal und nicht ∞ ist. Dies ist Knoten 3. Er wird markiert und für den nächsten Zyklus fixiert. 2. Zyklus : der Knoten 3 ist nun fixiert ( Abbildung 14(c) ). Für seine Nachfolger werden nun die kumulierten Weglängen errechnet ( rote Zahlen neben den Knoten 4 und 5, da hier eine Verbesserung erreicht wird ). Aus den nicht fixierten Knoten wird nun derjenige gesucht, dessen Weglänge minimal und endlich ist. Dies ist Knoten 2.5 Er wird markiert und fixiert. 3. Zyklus : der Knoten 2 ist nun fixiert ( Abbildung 14(d) ). Für seine Nachfolger werden nun die kumulierten Weglängen errechnet ( braune Zahl neben dem Knoten 7, da hier eine Verbesserung erreicht wird ). Aus den nicht fixierten Knoten wird nun derjenige gesucht, dessen Weglänge minimal und endlich ist. Es wird Knoten 4 markiert und fixiert. 4. Zyklen bis zum Ende : es werden nun nacheinander die Knoten 5, 6 und 7 markiert und fixiert. Die kumulierten Weglänge befinden sich in den Abbildungen in der Farbe des fixierten Knotens neben den jeweiligen Nachfolgern. Zum Beispiel kann als kürzester Weg von Knoten 1 nach Knoten 7 durch die Kantenmarkierungen der Weg W W = {(1, 3), (3, 4), (4, 6), (6, 5), (5, 7)} bestimmt werden. Die Weglänge dieses kürzesten Weges beträgt 10. 4 In den Abbildungen sind die fixierten Knoten immer gestrichelt umrandet Es kann auch Knoten 4 genutzt werden. Es gibt aber die Nummerierung der Knoten den Ausschlag. 5 44 Vorlesungsmitschrift Graphentheorie Wegprobleme Jetzt : l(k) < 0 für k ∈ K ist erlaubt Dazu folgendes Beispiel : xj 3 -4 xi 6 xk Dabei sei xi fixiert. Nach dem obigen Algorithmus folgt daraus für die Distanzen der Nachfolgerknoten : Dl (j) = Dl (i) + 3 Dl (k) = Dl (i) + 6 Angenommen, xj wird als nächstes fixiert. Dann ist aber Dl (k) − 4 = Dl (i) + 6 − 4 = Dl (i) + 2 besser ! Deshalb muß Schritt 2 des Verfahrens allgemeiner gefaßt werden : 2. Solange es eine Kante von xi nach xj gibt mit Dl (xi0 , xi ) + l(xi , xj ) < Dl (xi0 , xj ) korrigiere Dl (xi0 , xj ) = Dl (xi0 , xi ) + l(xi , xj ). 45 Vorlesungsmitschrift Graphentheorie Wegprobleme Betrachtet wird nun folgendes Beispiel : xj 3 -2 xi -2 xk Hier würde Schritt 2 immer wieder zur Verbesserung von Dl (xi0 , xj ) führen, da ein Durchgang von xj über xk und xi zurück nach xi immer Dl (xi0 , xj ) um −1 verringert. Offenbar dürfen also Kreise negativer Länge dürfen nicht beachtet werden. Eine Teillösung liefert der folgende Algorithmus. Algorithmus von Ford : Algorithmus von Ford Schritt 2 des obigen Algorithmus wird n−1 mal durchlaufen. Dann sind Wege mit n − 1 Kanten durchlaufen. Wird Schritt 2 ein weiteres Mal durchlaufen und tritt eine Verbesserung auf, so muß ein Kreis negativer Länge vorhanden sein. 46 Vorlesungsmitschrift Graphentheorie Wegprobleme Listing 6: Algorithmus von Ford 1 2 3 4 5 VAR N ,M , i0 : i n t e g e r; TYPE PListe = ARRAY [1.. N +1] OF i n t e g e r; KListe = ARRAY [1.. M ] OF i n t e g e r; K B L i s t e = ARRAY [1.. M ] OF real ; DListe = ARRAY [1.. N ] OF real ; 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 P R O C E D U R E Ford ( nf : Kliste ; inf , mar , num : PListe ; L : K B L i s t e ; DL : DListe ); CONST UNENDL = M A X R E A L; VAR i , j , k , durchl , p , q : i n t e g e r; Kreis : b o o l e a n; d0 : real ; BEGIN // I n i t i a l i s i e r u n g des V e r f a h r e n s FOR i :=1 TO N DO BEGIN DL [ i ]:= UNENDL ; mar [ i ]:=0; num [ i ]:=0; END ; DL [ i0 ]:=0; mar [ i0 ]:= N +1; num [1] := i0 ; q :=1; Durchl := 0; 22 23 24 25 26 REPEAT durchl := durchl +1; Kreis := false ; p :=1; 27 28 29 WHILE ( p <= N ) AND ( num [ p ] >0 ) DO BEGIN i := num [ p ]; p := p +1; 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 FOR j := inf [ i ] TO inf [ i +1] -1 DO BEGIN k := nf [ j ]; d0 := DL [ i ]+ L [ j ]; IF mar [ k ] = 0 THEN BEGIN DL [ k ]:= d0 ; mar [ k ]:= i ; q := q +1; num [ q ]:= k ; END ELSE IF d0 < DL [ k ] THEN BEGIN DL [ k ]:= d0 ; mar [ k ]:= i ; Kreis := true ; // erst w i c h t i g im n - ten D u r c h l a u f END ; END ; END ; // Ende eines D u r c h l a u f s UNTIL ( durchl = N ); END ; 47 Vorlesungsmitschrift Graphentheorie Wegprobleme Beispiel : 1 2 8 -3 -3 1 2 Kantenbewertung Knotennummer 5 Kantennummer 4 2 3 -2 4 6 5 5 5 3 Durchl := 1 P := 1 -3 -5 4 DL - Entfernung 2 7 Knotennummer Durchl := 1 P := 2 -3 1 1 DL - Entfernung 2 Knotennummer -6 2 3 3 5 5 4 Durchl := 1 P := 3..5 -3 4 DL - Entfernung 2 1 Knotennummer Durchl := 2..5 P := 1..5 4 4 -3 2 1 -6 DL - Entfernung Knotennummer -6 3 3 -8 -8 5 5 -1 4 -1 4 Abbildung 15: Algorithmus von Ford 48 Vorlesungsmitschrift Graphentheorie 5.3 Wegprobleme Längste Wege Beispiel 1 : Bauvorhaben ( Netzplantechnik ) Netzplantechnik I E H B Start G D A J J F C J F J K Ende wobei : Kante A B C D E F G H I J K Aktion Ausschachten Keller anlegen Gas- oder Öltank anlegen Heizung montieren Rohbau Heizung installieren Elektroinstallation Sanitärinstallation Innenausbau Malerarbeiten Einzug Mathematisch gesehen ist dieser Netzplan also ein gerichteter Graph G = (X, K) mit • Kante Aktivität ( Vorgang ) mit Bewertung ( meist Zeitdauer ) • Knoten Ereignis der Beendigung aller Aktivitäten, die in den Knoten einmünden Dabei wird angenommen, daß x1 der Start- und xn der Endknoten sind. Es sei nun ti der Zeitpunkt für das Eintreten des Ereignisses xi . 49 Vorlesungsmitschrift Graphentheorie Wegprobleme Eine sinnvolle Aufgabe ist es, tn zu minimieren. Mathematisch kann die Aufgabe dann so ausgedrückt werden : tn = min! t1 = 0 tj − ti ≥ l(k) , falls xi und xj durch die Kante k verbunden sind Diese Aufgabe heißt Terminplanungsproblem oder Potentialproblem. Terminplanungsproblem Lösung : Sei W ein beliebiger Weg von x1 nach xn , d.h. W = {( xi0 , xi1 ), (xi1 , xi2 ), . . . , (xir−1 , xir )} x1 xn so gilt tn = tn −tir−1 + tir−1 − tir−2 + tir−2 ± . . . − ti1 + ti1 − ti0 tir t1 =0 ≥ l(xir−1 , xir ) + l(tir−2 , tir−1 ) + . . . + l(ti0 , ti1 ) = l(W ) D.h., der frühestmögliche Zeitpunkt tn ist größer oder gleich der Länge eines beliebigen Weges von x1 nach xn ! Somit ist die Länge eines längsten Weges von x1 nach xn interessant. Bemerkungen : Ist xn von x1 aus erreichbar, dann gibt es immer einen längsten Weg von x1 nach xn . Zur Bestimmung eines längsten Weges stören jetzt Kreise positiver Länge. In diesem Fall ist das Terminplanungsproblem unlösbar. 50 Vorlesungsmitschrift Graphentheorie Wegprobleme Beispiel : x2 2 1 x1 1 x3 Im Beispiel soll t3 minimal werden. Beim Startknoten x1 ist t1 = 0. Aus t2 − t1 ≥ 2 folgt, daß −t2 ≤ −2 sein muß. Weiterhin ist t3 − t2 ≥ 1. Durch t1 − t3 ≥ 1 folgt, daß t3 ≤ −1 sein muß. Summiert man −t2 ≤ −2 und t3 ≤ −1, erhält man t3 − t2 ≤ −3. Dies ist ein Widerspruch zu t3 − t2 ≥ 1. Beispiel 2 : Knappsackproblem Knappsackproblem Gegeben sei ein Handelsmann, der n Gegenstände A1 , A2 , . . . , An seinen Kunden verkaufen soll. Die Gegenstände haben jeweils ein gewisses Gewicht pi und versprechen jeweils einen Gewinn von gi . Das Problem ist nun, daß nur ein Transport der Gegenstände bis zu einem maximalen Gewicht K möglich ist. Es soll aber ein maximaler Gewinn realisiert werden. Mathematisch ausgedrückt : • Nutzung der Gegenstände : 0 Ai ist nicht eingepackt Ai → xi = 1 Ai ist eingepackt • Gewichtsbegrenzung : • Gewinnmaximierung : n i=1 pi · xi ≤ K i=1 gi · xi = max! n 51 Vorlesungsmitschrift Graphentheorie Wegprobleme Beispiel : Bei K = 16 und n = 6 sind folgende Werte bekannt : 0 1 2 3 Ai 1 2 3 4 5 6 pi gi 9 13 7 10 5 8 4 6 4 5 2 2 7 8 4 5 6 9 10 11 12 13 14 15 16 1 13 0 2 10 0 10 0 3 0 8 0 0 8 0 4 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 5 0 5 5 0 6 2 0 7 0 8 0 Graph ist nicht vollständig ! Abbildung 16: Knappsack-Problem Die Länge eines längsten Weges in diesem Graphen entspricht dem maximalen Gewinn des Handelsmannes. Anmerkung der Autoren : Im Graphen ist auf der x-Achse das momentane Gesamtgewicht der eingepackten Gegenstände dargestellt ( 0 bis maximal 16 ). Auf der y-Achse sind die jeweils einzupackenden Gegenstände abgetragen. Auf den Kanten ist der jeweilige Gewinn dargestellt. Ausgehend von Gegenstand 1 hat der Handelsmann die Wahl, ob er es einpackt oder nicht ( Knoten auf Koordinate (0,1)6 ). Packt er es ein, erhöht sich das Gesamtgewicht auf 9 ( p1 = 9 ). Dabei ist ein Gewinn von g1 = 13 zu erwarten ( Kante vom Knoten auf Koordinate (0,1) zu Knoten auf Koordinate (9,2) ). Vom Knoten auf Koordinate (9,2) hat er nun die Wahl, ob er Gegenstand 2 einpackt oder nicht. Packt er es ein, erhöht sich das Gesamtgewicht auf 16 ( p1 + p2 = 16) bei einem Gesamtgewinn von 23 ( g1 +g2 = 23 ), wodurch man im Graphen auf den Knoten auf Koordinate (16,3) gelangt. Da nun das Maximalgewicht von K = 16 erreicht ist, können keine Gegenstände mehr eingepackt werden. 6 (0,1) bedeutet : Gesamtgewicht von Null, Gegenstand 1 52 Vorlesungsmitschrift Graphentheorie Wegprobleme Hat sich der Handelsmann aber entschieden, Gegenstand 1 nicht einzupacken, so gelangt man vom Knoten auf Koordinate (0,1) zu Koordinate (0,2). Das Gesamtgewicht hat sich nicht erhöht und der Gesamtgewinn verbleibt auf Null. Vom Knoten auf Koordinate (0,2) hat der Handelsmann nun die Wahl, ob er den Gegenstand 2 einpackt oder nicht. Nach diesem Prinzip kann der Graph aufgestellt werden ( Anmerkung: In obiger Abbildung ist der Graph nicht vollständig ! ). Lösung des Längsten-Weg-Problems : Man kann sich stets auf das Kürzester-Weg-Problem zurückziehen, indem die Vorzeichen aller Kantenbewertungen umgedreht und dann der kürzeste Weg bestimmt wird7 . Damit ist auch begründet, daß beim Längsten-Weg-Problem Kreise positiver Länge stören“. ” 7 Anmerkung der Autoren : Dieser Weg ist dann der längste Weg 53 Vorlesungsmitschrift Graphentheorie 6 Fluß- und Stromprobleme Fluß- und Stromprobleme Sei G = (X, K) ein gerichteter Graph. Definition : Ein Fluß in G ist eine Abbildung α : K → R, d.h. für k = (xi , xj ) ∈ K ist α(k) = α(xi , xj ) ∈ R. In der Regel wird ein Fluß α gesucht, α soll dabei gewissen Bedingungen genügen. Fluß Beispiele : 1. Maximalflußproblem Maximalflußproblem Gegeben ist ein Transportnetz“( gerichteter Graph ). ” Dabei sind 2 Knoten ausgezeichnet : xq = x1 (Quelle) mit d− (xq ) = 0, xs = xn (Senke) mit d+ (xs ) = 0. Für jede Kante k = (xi , xj ) gibt es eine obere Kapazitätsschranke βo (k) = βo (xi , xj ) für den Transport ( = Fluß) pro Zeiteinheit. Gesucht ist der maximale Fluß von xq nach xs . Es wird der Graph einschl. einer Rückkehrkante kr von xs nach xq mit der Kapazitätsschranke βo (xs , xq ) = βo (kr ) = ∞ betrachtet. Rückkehrkante Aufgabe : Bestimmung eines Flusses α mit (a) α(xs , xq ) = max ! α(x , x ) ≤ (b) i j j k α(xk , xi ) für alle Knoten xi (c) 0 ≤ α(xi , xj ) ≤ βo (xi , xj ) für alle Kanten (xi , xj ) 2. Verteilungsproblem Verteilungsproblem In r Orten wird Kies abgebaut und zwar in einer Zeiteinheit die Mengen b1 , b2 , . . . , br . In t Orten wird der Kies benötigt, und zwar in einer Zeiteinheit die Mengen c1 , c2 , . . . , ct . Gesucht ist eine Verteilung des Kieses. 54 Vorlesungsmitschrift Graphentheorie Fluß- und Stromprobleme Modell : Knoten x1 . . . xr y1 . . . yt zq , zs ( Kanten (xi , yj ) (zq , xi ) (yj , zs ) (zs , zq ) ( Produzenten ) ( Verbraucher ) künstliche Quelle und Senke ) falls yi von xi beliefert werden, kann, i = 1, 2, . . . , r ( Quelle zu allen Produzenten ), j = 1, 2, . . . , t ( von Verbrauchern zur Senke ), Rückkehrkante Aufgabe : Bestimmung des Flusses α, wobei (a) (b) (c) (d) (e) (f) 0 ≤ α(xi , yj ) für alle Kanten (xi , yj ) 0 ≤ α(zq , xi ) ≤ bi für i = 1, 2, . . . , r cj ≤ α(yj , zs ) für j = 1, 2, . . . , t α(xi , yj ) = α(zq , xi ) für i = 1, 2, . . . , r j α(xi , yj ) = α(yj , zs ) für j = 1, 2, . . . , t i j α(yj , zs ) = α(zs , zq ) = i α(zq , xi ) 3. Transportproblem Transportproblem Zusätzlich ist eine Kantenbewertung γ für die Kanten (xi , yj ) gegeben ( Kosten für den Transport pro Zeit- und Mengeneinheit ). Aufgabe : Bestimmung eines Flusses α mit minimalen Kosten, d.h. γ(xi , yj )α(xi , yj ) = min ! i,j wobei die Gleichungen (a) bis (f) gelten. 55 Vorlesungsmitschrift Graphentheorie Fluß- und Stromprobleme Gemeinsamkeiten aller Aufgaben : Die sogenannte Ergiebigkeit des Flusses in jedem Knoten xi ist Null8 : α(xj , xi ) − α(xk , xi ) = 0 j was rausgeht“ ” k Ergiebigkeit was reingeht“ ” Ein solcher Fluss heißt auch Strom in G. Strom Stromprobleme : Gegeben ist ein gerichteter Graph G = (X, K) mit fixierten Knoten xa = xi1 und xe = xi2 und fixierter Kante k0 = (xa , xe ). Jeder Kante k = (xi , xj ) sind 2 Bewertungen βu (xi , xj ) ≤ βo (xi , xj ) zugeordnet ( βu = −∞ und βo = +∞ sind zugelassen ). Aufgabe : Bestimmung eines Stromes α mit 1. α(k0 ) = α(xa , xe ) = max! 2. βu (xi , xj ) ≤ α(xi , xj ) ≤ βo (xi , xj ) Unter der Annahme, es sei ein sogenannter zulässiger Strom α bekannt, d.h. βu (xi , xj ) ≤ α(xi , xj ) ≤ βo (xi , xj ) für alle Kanten k = (xi , xj )9 so kann folgende Teilaufgabe formuliert werden. Teilaufgabe : Ein zulässiger Strom α soll sukzessive bezüglich der Bewertung α(k0 ) = α(xa , xe ) verbessert werden. 8 9 Vgl. 1. Kirchhoff’sches Gesetz Sind die βu (xi , xj ) ≡ 0, so ist α ≡ 0 immer ein zulässiger Strom. 56 zulässiger Strom Vorlesungsmitschrift Graphentheorie Fluß- und Stromprobleme Beispiel : Es sei k0 = (x3 , x4 ). Offenbar liegt α(x3 , x4 ) = 2 unterhalb des maximalen Wertes 6. Man sieht : • Erhöhung von α(x3 , x4 ) =⇒ – Erhöhung von α(x4 , x5 ) – Absenkung von α(x1 , x4 ) – ist nicht möglich • Erhöhung von α(x4 , x5 ) =⇒ – Erhöhung von α(x5 , x2 ) – ist nicht möglich – Absenkung von α(x3 , x5 ) • Absenkung von α(x3 , x5 ) um 1 =⇒ – Erhöhung von α(x4 , x5 ) um 1 – Erhöhung von α(x3 , x4 ) um 1 57 Vorlesungsmitschrift Graphentheorie Fluß- und Stromprobleme Verfahren zur Verbesserung eines zulässigen Stromes : α sei ein zulässiger Strom in G. Falls α(xa , xe ) = βo (xa , xe ), dann hat α den maximalen Wert α(xa , xe ). Im anderen Fall : Es wird folgender neuer Graph G = (X, K ) mit einer Kantenbewertung l gebildet : (xa , xe ) ∈ K mit l (xa , xe ) = βo (xa , xe ) − α(xa , xe ) > 0 Wenn (xi , xj ) ∈ K mit 1. α(xi , xj ) < βo (xi , xj ), dann (xi , xj ) ∈ K mit l (xi , xj ) = βo (xi , xj ) − α(xi , xj ) > 0. 2. α(xi , xj ) > βu (xi , xj ), dann (xj , xi ) ∈ K mit l (xj , xi ) = α(xi , xj ) − βu (xi , xj ) > 0. Beachte : (xe , xa ) ∈ / K ! Beispiel: G mit Kantenbewertung l Es wird ein Weg von xe nach xa in G gesucht. Ein solcher sei der Weg : W = {( xi0 , xi1 ), (xi1 , xix2 ), . . . , (xir−1 , xir )} xa xe Berechne den Stromerhöhungswert h := minj=1...r l (xij−1 , xij ). 58 Vorlesungsmitschrift Graphentheorie Fluß- und Stromprobleme Der neue Strom ist der folgende : α(xa , xe ) := α(xa , xe ) + h Für (xij−1 , xij ) ∈ W α(xij−1, xij ) := α(xij−1 , xij ) + h, oder α(xij , xij−1 ) := α(xij , xij−1) − h, falls (xij−1 , xij ) ∈ K falls (xij , xij−1 ) ∈ K Beispiel: Ein Weg von x4 nach x3 ist W = {(x4 , x5 ), (x5 , x3 )}. Der Stromerhöhungswert ist h = 1. Der neue Strom α ist abgebildet. Das Verfahren wird mit diesen neuen zulässigen Strom erneut durchgeführt. Es bricht ab, wenn es in G keinen Weg von xe nach xa gibt. 59