Kapitel 2: Elementare Graphalgorithmen und Anwendungen Gliederung der Vorlesung 1. Grundbegriffe 2. Elementare Graphalgorithmen und Anwendungen 3. Kürzeste Wege 4. Netzplantechnik 5. Minimal spannende Bäume 6. Traveling Salesman Problem 7. Flüsse in Netzwerken und Anwendungen 8. Bipartite Graphen 2/1, Folie 1 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Gliederung des Kapitels a) Breitensuche b) Tiefensuche c) Anwendungen der Tiefensuche ... Anmerkung Wir diskutieren diese Suchstrategien für gerichtete und ungerichtete Graphen !!! 2/1, Folie 2 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Anmerkung • • die Idee bei der Breitensuche besteht darin, beginnend mit einem Startknoten s, alle von s aus erreichbaren Knoten zu „erforschen“ die von s erreichbaren Knoten werden „schichtweise“ erforscht • • • • 2/1, Folie 3 zunächst s selbst dann alle Knoten u, die von s aus erreichbar sind und zwar auf einem Pfad der Länge 1 dann alle Knoten u, die von s aus erreichbar sind und zwar auf einem Pfad der Länge 2 ... © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Hilfsbegriff: Distanz eines Knotens 2/1, Folie 4 • • • es sei G = (V,E) ein (ungerichteter) Graph es seien s und u Knoten in V mit (s,u) ∈ Rerr es sei k ≥ 0 • d(s,u) = k, falls es eine Pfad P von s nach u der Länge k gibt und es keinen Pfad P‘ von s nach u einer Länge kleiner als k gibt © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Anmerkungen • • es sei G = (V,E) ein (ungerichteter) Graph es sei s ein Knoten in V • die Teilmenge Vi ⊆ V, die alle von s aus erreichbaren Knoten u mit d(s,u) = i enthält, kann wie wie folgt induktiv definiert werden: • • 2/1, Folie 5 V0 = { s } und Vi+1 = { u ∈ V \ (V0 ∪ ... ∪ Vi) | es gibt eine Kante {v,u} ∈ E mit v ∈ Vi } © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Zugehörige algorithmische Fragestellung • gegeben: • • • ein (ungerichteter) Graph G = (V,E) ein Knoten s ∈ V gesucht: • für jeden Knoten u ∈ V, der von s aus erreichbar ist, den Wert d(s,u) ... der Graph G habe genau n Knoten (/* der Einfachheit halber sei V = { 1,...,n } */) und m Kanten 2/1, Folie 6 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Zugrunde liegende Datenstrukturen • • • 2/1, Folie 7 die zu G gehörende Adjazenzliste A[1..n] ein Array D[1..n] (/* in dem sich die Distanz der einzelnen Knoten zum Knoten s „gemerkt“ wird */) eine Liste L (/* zur Steuerung der Verarbeitung */) © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Realisierung • • • setze D[j] = +∞ für alle j = 1,...,n setze D[s] = 0 und L = { s } while L nicht leer ist do entferne das erste Element v aus L for all u ∈ A[v] do if D[u] == +∞ then setze D[u] = D[v] + 1 und füge u ans Ende von L ein ... es sollte klar sein, dass das Gewünschte geleistet wird ... es sollte klar sein, dass der Algorithmus nur O(n+m) viele Rechenschritte benötigt (/* bei einem ungerichteten Graphen wird jede Kante sogar nur einmal „angefasst“ */) 2/1, Folie 8 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 ... wir wollen diesen Graphen, beginnend beim Knoten 1, mit Hilfe der Breitensuche „erforschen“ ... ein Knoten wird blau gefärbt, wenn er „entdeckt“ wurde, und gelb gefärbt, wenn er „vollständig verarbeitet“ wurde 2/1, Folie 9 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 2/1, Folie 10 © 2013 Prof. Steffen Lange - 1 3 5 4 7 6 HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 ... „vollständig verarbeitet“: 1 2/1, Folie 11 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 ... „vollständig verarbeitet“: 1,2 2/1, Folie 12 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 ... „vollständig verarbeitet“: 1,2,3 2/1, Folie 13 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 ... „vollständig verarbeitet“: 1,2,3 ... und so weiter 2/1, Folie 14 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 ... „vollständig verarbeitet“: 1,2,3,4,5,6,7 2/1, Folie 15 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Anmerkungen • wir betrachten im Folgenden eine geringfügige Modifikation der Breitensuche, wobei sich „gemerkt“ wird, welcher Knoten des Graphen dafür verantwortlich ist, dass ein Knoten „entdeckt“ wird ... wenn der Knoten u dafür verantwortlich ist, dass der Knoten v „entdeckt“ wurde, nennen wir u Vorgänger des Knotens v ... in einem Array P[1...n] werden sich die Vorgänger der einzelnen Knoten gemerkt 2/1, Folie 16 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Realisierung • • • setze D[j] = +∞ und P[j] = ⊥ für alle j = 1,...,n setze D[s] = 0 und L = { s } while L nicht leer ist do entferne das erste Element v aus L for all u ∈ A[v] do if D[u] == +∞ then setze D[u] = D[v] + 1, P[u] = v und füge u ans Ende von L ein ... das Zeichen ⊥ steht für nicht definiert 2/1, Folie 17 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 ... nach Abschluss der Breitensuche entsteht folgendes Array P[1,...,7]: 2/1, Folie 18 1 2 3 4 5 6 7 ⊥ 1 1 1 3 3 6 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Hilfsbegriff: der durch die Breitensuche induzierte Vorgängerteilgraph • • es sei G = (V,E) der gegebene gerichtete Graph es sei der Knoten s der Startknoten • der durch die Breitensuche induzierte Vorgängerteilgraph G‘ = (V‘,E‘) ist wie folgt definiert: • • 2/1, Folie 19 V‘ = { v ∈ V | (s,v) ∈ Rerr } E‘ = { (P[v],v) | v ∈ V‘ und v ≠ s } © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beispiel 2 1 3 5 4 7 6 1 ... der durch die Breitensuche induzierte Vorgängerteilgraph: 4 3 1 5 6 7 2/1, Folie 20 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Beobachtung • • es sei G = (V,E) der gegebene gerichtete Graph es sei der Knoten s der Startknoten Dann gilt: Der durch die Breitensuche induzierte Vorgängerteilgraph ist ein Baum mit der Wurzel s. 2/1, Folie 21 © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung Kapitel 2: Elementare Graphalgorithmen und Anwendungen Breitensuche ! Begriff: Baum • es sei G = (V,E) ein gerichteter Graph • G ist ein Baum, falls folgende Bedingungen erfüllt sind: • • 2/1, Folie 22 V enthält genau einen Knoten, der nicht Endknoten einer Kante in E ist (/* dieser Knoten heißt Wurzel */) alle anderen Knoten von V sind Endknoten genau einer Kante in E © 2013 Prof. Steffen Lange - HDa/FbI - Graphen und Optimierung