2 Tiefen- und Breitensuche

Ähnliche Dokumente
Graphentheorie. Eulersche Graphen. Eulersche Graphen. Eulersche Graphen. Rainer Schrader. 14. November Gliederung.

Diskrete Strukturen. Hausaufgabe 1 (5 Punkte) Hausaufgabe 2 (5 Punkte) Wintersemester 2007/08 Lösungsblatt Januar 2008

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 1: Grundlagen der algorithmischen Graphentheorie

Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

Graphen KAPITEL 3. Dieses Problem wird durch folgenden Graph modelliert:

Tutoraufgabe 1 (Suchen in Graphen):

Aufgabe 4.2 Sei G = (V, E, l) ein ungerichteter, gewichteter und zusammenhängender Graph.

Algorithmen und Datenstrukturen

Übung zur Vorlesung Diskrete Strukturen I

Vorlesung Datenstrukturen

Bäume und Wälder. Definition 1

Übung zur Vorlesung Diskrete Mathematik (MAT.107) Blatt Beispiellösungen Abgabefrist:

Breitensuche BFS (Breadth First Search)

Bäume und Wälder. Definition 1

Graphdurchmusterung, Breiten- und Tiefensuche

Freie Bäume und Wälder

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza)

\ E) eines Graphen G = (V, E) besitzt die gleiche Knotenmenge V und hat als Kantenmenge alle Kanten des vollständigen Graphen ohne die Kantenmenge E.

Algorithmen und Datenstrukturen 2-1. Seminar -

Übung zur Vorlesung Diskrete Strukturen I

5. Musterlösung. Problem 1: Vitale Kanten * ω(f) > ω(f ). (a) Untersuchen Sie, ob es in jedem Netzwerk vitale Kanten gibt.

Kapitel IV Minimale Spannbäume

Diskrete Mathematik Graphentheorie (Übersicht)

WS 2013/14. Diskrete Strukturen

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Mayr)

Matchings in Graphen. Praktikum Diskrete Optimierung (Teil 5)

Isomorphie von Bäumen

Diskrete Strukturen Kapitel 4: Graphentheorie (Bäume)

Seien u, v V, u v. Da G zusammenhängend ist, muss mindestens ein Pfad zwischen u und v existieren.

Vorlesungstermin 2: Graphentheorie II. Markus Püschel David Steurer. Algorithmen und Datenstrukturen, Herbstsemester 2018, ETH Zürich

Von den Kanten von Gewicht 4 wird nur noch eine ausgewählt, die zu dem letzten nicht ausgewählten Knoten führt: 1. Juni

3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt:

Lernmodul 7 Algorithmus von Dijkstra

Diskrete Mathematik 1 WS 2008/09

Richtig oder falsch? Richtig oder falsch? Richtig oder falsch? Mit dynamischer Programmierung ist das Knapsack- Problem in Polynomialzeit lösbar.

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Diskrete Mathematik 1

Wie findet man den optimalen Weg zum Ziel? Klassische Probleme der Kombinatorischen Optimierung

Einführung in die Informatik 2

Kapitel IV Minimale Spannbäume

Graphentheorie. Formale Grundlagen (WIN) 2008S, F. Binder. Vorlesung im 2008S

Algorithmische Graphentheorie

durch Einfügen von Knoten konstruiert werden kann.

Färbungen von Graphen: Die chromatische Zahl und der Satz von Brooks

Algorithmen und Datenstrukturen

Dieser Graph hat 3 Zusammenhangskomponenten

Fortgeschrittene Netzwerk- und Graph-Algorithmen

4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1

Kapitel 8: Bipartite Graphen Gliederung der Vorlesung

Unendliche Graphen. Daniel Perz 24. Dezember Definition 1. Ein Graph G heißt lokal endlich, wenn alle Knotengrade endlich sind.

Bipartite Graphen. Beispiele

Formale Grundlagen. Graphentheorie 2008W. Vorlesung im 2008S

Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14

Betriebliche Optimierung

II. Wissenschaftliche Argumentation

Wie wird ein Graph dargestellt?

9 Minimum Spanning Trees

Bemerkung: Der vollständige Graph K n hat n(n 1)

Informatik B Sommersemester Musterlösung zur Klausur am

Betriebswirtschaftliche Optimierung

Proseminar Graphentheorie Vortrag 3 Matching. Inhalt: 1. Grundlagen 2. Matchings in bipatiten Graphen 3. Matchings in allgemeinen Graphen

Informatik II, SS 2018

Zentralübung zur Vorlesung Diskrete Strukturen

Vorlesung Datenstrukturen

Nachbarschaft, Grad, regulär, Inzidenz

Wir betrachten einen einfachen Algorithmus, der den Zusammenhang eines Graphen testen soll.

Minimal spannender Baum

Technische Universität München Zentrum Mathematik Propädeutikum Diskrete Mathematik. Weihnachtsblatt

Graphentheorie. Zusammenhang. Zusammenhang. Zusammenhang. Rainer Schrader. 13. November 2007

WS 2015/16 Diskrete Strukturen Kapitel 4: Graphen (Planare Graphen, Färbung)

Graphentheorie. Kardinalitätsmatchings. Kardinalitätsmatchings. Kardinalitätsmatchings. Rainer Schrader. 11. Dezember 2007

8: Bipartite Graphen. s 1. bei dem es eine Kante zwischen s i und k gibt, wenn der Schüler s i die Note k für seine Arbeit bekommen hat.

2. November Gradfolgen Zusammenhang Kürzeste Wege. H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 37

4. Kreis- und Wegeprobleme

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15

Diskrete Strukturen. Hausaufgabe 1 (5 Punkte) Wintersemester 2007/08 Lösungsblatt Januar 2008

lässt sich auch ableiten, dass es einen augmentierenden Pfad der Länge höchstens

Matching. Organisatorisches. VL-18: Matching. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger. Tanzabend

Wiederholung zu Flüssen

Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind.

Bäume und Wälder. Seminar: Graphentheorie Sommersemester 2015 Dozent: Dr. Thomas Timmermann

Algorithmen und Datenstrukturen 1-5. Seminar -

Proseminar Online Algorithmen, Prof. Dr. Rolf Klein

Vorlesung Datenstrukturen

Algorithmische Graphentheorie

Grundzüge von Algorithmen und Datenstrukturen, WS 15/16: Lösungshinweise zum 13. Übungsblatt

Westfählische Wilhelms-Universität. Eulersche Graphen. Autor: Jan-Hendrik Hoffeld

MafI I: Logik & Diskrete Mathematik (F. Hoffmann)

Algorithmen & Komplexität

Argumentationen zu ermöglichen, verlangen wir, dass diese Eigenschaft auch für induzierte Teilgraphen

Kantengraphen und Planare Graphen. Seminararbeit

Informatik II, SS 2014

3.2 Generischer minimaler Spannbaum-Algorithmus

In diesem Skript werden folgende Begriffe anhand von einfachen Beispielen eingeführt:

Univ.-Prof. Dr. Goulnara ARZHANTSEVA

Fünf-Farben-Satz. Seminar aus reiner Mathematik, WS 13/14. Schweighofer Lukas, November Seite 1

Grundbegri e der Graphentheorie: Eckengrad, Wege und Kreise, Zusammenhang

2.4 Starke Zusammenhangskomponenten in Digraphen

KAPITEL 3 MATCHINGS IN BIPARTITEN GRAPHEN

1. Einleitung wichtige Begriffe

Transkript:

2 Tiefen- und Breitensuche Übersicht 2.1 SpannendeBäume... 21 2.2 WiefindetmanspannendeBäume?... 24 2.3 AnwendungenvonBFSundDFS... 29 2.4 Aufgaben... 33 2.1 Spannende Bäume Vor nicht allzu langer Zeit hat Karl auf dem Dachboden seiner Großmutter eine alte verstaubte Karte gefunden, auf der die Umrisse eines alten Palastes eingezeichnet sind. Nach einigen Wochen des Nachforschens in verschiedenen Bibliotheken meint er sein Ziel gefunden zu haben und reist mit einer Gruppe von Freunden zu dem vermeintlichen Ort. Dort stellen sie auch bald mit Hilfe neuer Radartechnik fest, dass tief unter der Erde ein Gebäude verschüttet liegt. Nach einigen Wochen Arbeit sind sie in den ersten Raum vorgedrungen und müssen nun etwas enttäuscht feststellen, dass alle Gänge mit einer starken Eisentür versperrt sind (Abb. 2.1). Abb. 2.1: Die Freunde sind im Zimmer mit dem blauen Kreuz gelandet. Wie können sie sicherstellen, dass ihnen der Zugang zu keinem Schatz verwehrt bleibt und sie dabei möglichst wenig Türen sprengen müssen? Die schwarzen Balken in den Gängen symbolisieren die dicken Türen.

22 2 Tiefen- und Breitensuche In den Eisentüren befindet sich zwar ein Schlüsselloch, aber da es so dunkel ist, kann man den Inhalt der angrenzenden Räume nicht sehen. Zu allem Überfluss lassen sich die Schlüssel nicht finden; nun überlegen die Freunde Tag und Nacht, wie sie die Schätze wohl am besten bergen können. Immer von oben nach unten zu graben, würde viel zu lange dauern. Darauf haben sie sich schnell geeinigt. Karls nächste Idee, die Türen zu sprengen, wird jedoch mit großer Begeisterung angenommen. Jetzt brauchen sie nur noch einen Plan, wo die Sprengladungen nach und nach platziert werden. Der Sprengplan soll garantieren, dass nach seiner Durchführung alle Räume zu besichtigen sind, und dabei möglichst wenige Sprengungen enthalten. Wie sieht Ihr Vorschlag aus? Wie viele Sprengungen sind mindestens notwendig, um alle Kammern zu erreichen? Das Problem lässt sich in die Sprache der Graphen übertragen: Die Knoten des Graphen stellen die unterschiedlichen Räume dar und die Gänge zwischen den Räumen die Kanten. Damit haben wir den Palastgrundriss modelliert. Fehlt noch der Sprengplan. In der Graphentheorie entspricht dieser einem Teilgraphen und jede Kante des Teilgraphen spiegelt einen Sprengvorgang wider. Da Max von dem mittleren Raum aus zu allen anderen Räumen gelangen will, suchen wir einen zusammenhängenden Teilgraphen, der alle Knoten enthält. Außerdem sollen möglichst wenig Sprengungen durchgeführt werden. Insbesondere Kreise kann man sich sparen. Also suchen wir nach einem Baum. Ein solcher Baum wird auch als spannender Baum bezeichnet, da er den ursprünglichen Graphen aufspannt. Definition. Sei G =(V,E) ein Graph. Ein Teilgraph T =(V 0,E 0 )vong, der ein Baum ist und für den V 0 = V gilt, heißt spannender Baum (Abb. 2.2). G T Abb. 2.2: Die blauen Kanten (rechts) bilden einen spannenden Baum in G (links). Besitzt denn jetzt jeder Graph einen spannenden Baum, bzw. können wir Karl garantieren, dass er auf jeden Fall einen günstigen Sprengplan finden wird? In dem folgenden Graphen (Abb. 2.3) erkennt man recht schnell, dass ein spannender Baum nicht existieren kann. Wie soll der Baum denn auch die Knoten a und b miteinander verbinden, wenn zwischen den beiden Knoten schon im ursprüngli-

2.1 Spannende Bäume 23 chen Graphen kein Weg existiert? Wie würde ein entsprechender Palastgrundriss aussehen, für den es keinen geeigneten Sprengplan gibt? b a Abb. 2.3: Der Graph ist nicht zusammenhängend. Also kann auch kein spannender Baum in ihm existieren. Wir müssen also fordern, dass der Graph zusammenhängend ist. Diese Bedingung reicht dann schon aus. Satz 2.1. Jeder zusammenhängende Graph enthält einen spannenden Baum. Beweis: Die Idee des Beweises ist es, nach und nach Kanten aus einem gegebenen Graphen G zu löschen, sodass der neue Graph zusammenhängend bleibt, aber keine Kreise mehr enthält. Sei G also ein zusammenhängender Graph. Entweder ist G bereits ein Baum, dann ist der Beweis erbracht, oder G besitzt einen Kreis C. EntfernenwirausG eine Kante e des Kreises C, soistg = G e nach wie vor zusammenhängend (Abb. 2.4). e C Abb. 2.4: Löscht man die blaue Kante aus dem Graphen, so ergibt sich ein neuer, zusammenhängender Teilgraph des ursprünglichen Graphen. Entweder ist G nun kreisfrei oder G besitzt wieder einen Kreis C.Imzweiten Fall entfernen wir wieder eine Kante e aus C. Diesen Löschvorgang wiederholen wir so lange, bis der Graph keine Kreise mehr enthält. (Wie viele Kanten müssen in einem gegebenen Graphen mit m Kanten gelöscht werden? Wie viele Kanten können es maximal sein?) 6 Da der neue Graph dieselben Knoten hat, wie der ursprüngliche, zusammenhängend und kreisfrei ist, ist er ein spannender Baum (Theorem 1.8). Der Beweis enthält schon eine Idee, wie man mit Hilfe eines Algorithmus einen spannenden Baum konstruieren kann. Allerdings ist es schwierig in einem gegebenen Graphen einen Kreis zu finden, ohne vorher einen spannenden Baum berech-

24 2 Tiefen- und Breitensuche net zu haben. Im nächsten Abschnitt werden wir zwei einfache Methoden kennen lernen, einen spannenden Baum zu berechnen. 2.2 Wie findet man spannende Bäume? Auf dem Schatzplan einen spannenden Baum zu finden, ist nicht so schwierig. Ihnen sind sicher schon einige Möglichkeiten eingefallen. Aber wie erhalten wir einen spannenden Baum, wenn uns ein viel größerer Graph gegeben ist? Der Graph basierend auf dem Stadtplan von Berlin hat zum Beispiel 10.000 Knoten und 30.000 Kanten. Wir brauchen also Regeln, mit denen wir das Problem lösen können. Schauen wir noch einmal auf den Schatzplan und überlegen uns, wie wir hier sinnvoll einen Sprengplan konstruieren können. Eine erste Idee dazu ist die folgende: Wir starten in dem ersten Zimmer mit dem Kreuz und zünden dort eine helle Fackel an. Von dort aus betrachten wir alle Gänge nacheinander, die von diesem Zimmer aus losgehen. Als Erstes schauen wir durch das Schlüsselloch der Tür in dem Gang. Wenn wir ein Licht durch das Schlüsselloch sehen, wissen wir, dass wir in dem angrenzenden Zimmer schon einmal waren. Wir markieren den Gang mit einem dicken Kreuz, damit wir die Tür auf keinen Fall sprengen (Abb. 2.5). IsteshingegenindemanderenZimmerdunkel,sowarenwirnochnichtdortund sprengen die Tür. Als Nächstes kann dann ein Suchtrupp das Zimmer untersuchen und eine Fackel anzünden, während der Sprengmeister die restlichen Türen und Gänge begutachtet. Die Schatzsucher könnten auf diese Weise zu dem folgenden Netz gekommen sein (Abb. 2.5). Welche Türen würden sie danach sprengen? Hat die Wahl des nächsten Zimmers eine Auswirkung darauf, welche Türen zerstört werden? Abb. 2.5: Bisher haben die Schatzsucher erfolgreich die ersten Zimmer begutachtet. Wie sollten sie weitermachen? Damit wir die obige Idee auch allgemein umsetzen können, sodass zum Beispiel auch ein Computer sie versteht, sollten wir sie noch einmal etwas genauer aufschreiben:

2.2 Wie findet man spannende Bäume? 25 Algorithmus 2.1 Breitensuche (engl. breadth first search, BFS) Input: Zusammenhängender Graph G =(V,E). Output: Schritt 1: Schritt 2: Aufspannender Baum T =(V,E 0 )vong. Sei E 0 zunächst leer. Bereiten Sie zwei ebenfalls leere Knotenlisten L 1 und L 2 vor. Wählen Sie einen beliebigen Startknoten v 0 V und schreibe v 0 in L 1 und L 2. Falls L 1 leer ist, dann STOPP und return T =(V,E 0 ). Ansonsten nehmen Sie den ersten Knoten v aus L 1. Schritt 3: Falls alle Nachbarknoten von v in L 2 sind, so löschen Sie v aus L 1. Ansonsten wählen Sie einen der Nachbarknoten w aus, der nicht in L 2 ist, schreiben Sie diesen ans Ende der Listen L 1 und L 2 und fügen Sie die Kante (v, w) zue 0 hinzu. Schritt 4: Gehen Sie zu Schritt 2. Übertragen wir den Algorithmus wieder zurück in das Schatzkartenbeispiel, so gilt: Die Kantenmenge E 0 speichert die Türen, die gesprengt werden; in der Liste L 2 merken wir uns alle Zimmer, die wir schon besucht haben, und die Liste L 1 enthält all diejenigen erreichten Zimmer, von denen aus noch nicht alle Türen überprüft bzw. gegebenenfalls auch gesprengt wurden. Wenden wir den Algorithmus doch einmal auf den folgenden Graphen an. Beispiel. Wir beginnen im Graphen aus der Abbildung 2.6 mit dem Knoten a. Dann gilt also v 0 = a, L 1 = {a}, L 2 = {a} und E 0 enthält noch keine Kante. In Schritt 2 wählen wir jetzt den ersten Knoten aus der Liste L 1, d.h. den Knoten a. Bisher ist noch keiner seiner Nachbarn in der Liste L 2 eingetragen. Wir fügen nun einen seiner Nachbarn, z.b. b, indielistel 1 und L 2 und die Kante (a, b) in E 0 ein. Damit gilt L 1 = {a, b},l 2 = {a, b} und E 0 = {(a, b)}. Da noch nicht alle Nachbarn von a in L 2 sind, betrachten wir nun den Knoten c und somit gilt nach Schritt 3 L 1 = {a, b, c},l 2 = {a, b, c} und E 0 = {(a, b), (a, c)}. Jetzt sind alle Nachbarn von a in L 2 und wir löschen a aus L 1,d.h.L 1 = {b, c}. Als Nächstes gehen wir zum Knoten b. Auch hier haben wir noch zwei Nachbarn, die nicht in L 2 enthalten sind, nämlich d und g. Nachdem wir diese beiden betrachtet haben, können wir auch b aus L 1 löschen und erhalten L 1 = {c, d, g},l 2 = {a, b, c, d, g} und E 0 = {(a, b), (a, c), (b, d), (b, g)} (Abb. 2.6). Wie sieht die Fortführung des Algorithmus aus?

26 2 Tiefen- und Breitensuche c e a d f b Abb. 2.6: Wir starten mit dem Knoten a und führen nach und nach die Schritte des Algorithmus aus. Auf diesem Graphen hat der Algorithmus funktioniert und einen spannenden Baum berechnet. Bisher haben wir aber noch nicht bewiesen, dass der Algorithmus immer einen solchen Baum berechnet. Wir könnten auch einfach Glück gehabt haben. Damit wir uns nicht noch länger mit dieser Unsicherheit abfinden müssen, wollen wir seine Korrektheit beweisen. g Satz 2.2. Wenn ein Graph zusammenhängend ist, so lässt sich ein spannender Baum mit der Breitensuche (Algorithmus 2.1) berechnen. Beweis: Den Beweis führen wir in drei Teilen: Zunächst zeigen wir, dass am Ende des Algorithmus alle Knoten in L 2 sind, d.h. L 2 = V. Danach beweisen wir, dass der berechnete Graph (L 2,E 0 ) zusammenhängend ist, und dann, dass er kreisfrei ist. Aus den beiden letzten Eigenschaften können wir sofort folgern, dass der Graph ein Baum ist (Satz 1.8). Teil 1 : Am Ende des Algorithmus enthält L 2 sämtliche Knoten. Beweis: Beweis durch Widerspruch. Angenommen, am Ende des Algorithmus gibt es einen Knoten u 0,dernichtinL 2 enthalten ist, d.h. u 0 / L 2. Da G zusammenhängend ist, gibt es einen Weg vom Startknoten v 0 zu u 0.Sei u 1 der erste Knoten auf diesem Weg, der nicht in L 2 ist, und v 1 dessen Vorgängerknoten auf dem Weg, also u 1 / L 2 und v 1 L 2. Da niemals Knoten aus L 2 gelöscht werden, war u 1 niemals in L 2 (Abb. 2.7). u 0 v 0 p u 1 Abb. 2.7: Der Knoten u 0 ist mit v 0 über einen Weg verbunden. Die blauen Knoten sind in der Menge L 2, die anderen nicht. v 1 Nach der Anweisung in Schritt 2 werden Knoten nur gleichzeitig in L 1 und L 2 eingetragen. Da v 1 L 2 ist, war v 1 auch in L 1. Der Algorithmus stoppt erst,

2.2 Wie findet man spannende Bäume? 27 wenn L 1 leer ist, d.h. v 1 muss irgendwann gelöscht worden sein. Allerdings erfolgt dies erst, wenn alle Nachbarknoten in L 2 sind. Das ist ein Widerspruch dazu, dass v 1 den Nachbarknoten u 1 besitzt, der nach unserer Wahl noch nicht in L 2 enthalten ist. Die Annahme u 0 / L 2 ist also falsch. Somit enthält L 2 am Ende sämtliche Knoten. Teil 2 : Der berechnete Graph (V,E 0 ) ist zusammenhängend. Beweis: Den Zusammenhang erhalten wir durch die Art und Weise, wie Knoten und auch Kanten in die Liste L 2 bzw. in die Kantenmenge E 0 in Schritt 3 eingefügt werden. Wir beweisen die Aussage mit vollständiger Induktion, indem wir zeigen, dass zu jedem Zeitpunkt im Algorithmus die Knoten aus L 2 und E 0 einen zusammenhängenden Graphen bilden. Die Induktion geht über die Anzahl der Knoten in L 2. Zum Start des Algorithmus stimmt die Aussage, da der erste Knoten v 0 zusammenhängend ist. Damit haben wir den Induktionsanfang. Die Induktionsannahme lautet: Die bisherigen k Knoten aus der Liste L 2 zusammenmitdenbisherigenkantenine 0 bilden einen zusammenhängenden Graphen. Im Induktionsschluss müssen wir zeigen, dass der Knoten, der als nächstes in die Liste L 2 eingefügt wird, ebenfalls über einen Weg mit den anderen k Knoten aus der Liste verbunden ist. Betrachten wir also den Schritt des Einfügens eines neuen Knotens w etwas genauer (Abb. 2.8). Der Knoten w wird in die Liste L 2 eingefügt, wenn ein Knoten v aus L 1 (und somit auch aus L 2 ) zu ihm benachbart ist. Zu diesem Zeitpunkt wird dann die Kante (v, w) in die Menge E 0 einbezogen und w sowohl in der Liste L 1 als auch in der Liste L 2 gespeichert. Da v mit jedem Knoten in der Liste L 2 über einen Weg verbunden ist (Induktionsannahme), ist auch w mit allen Knoten verbunden (wir gelangen über die Kante (w, v) vom Knoten w zum Knoten v und von dort aus zu jedem anderen Knoten). Damit ist L 2 und E 0 auch nach dem Hinzufügen des nächsten Knotens zusammenhängend. So haben wir auch diese Behauptung bewiesen. s nach E 0 w nach L1 00 11 und L 2 v Abb. 2.8: Die blauen Knoten sind schon in L 1 und L 2 und die blauen Kanten in E 0 enthalten. Wird w über v erreicht, so wird die Kante (v, w) in E 0 und der Knoten w in die Listen L 1 und L 2 eingefügt. Teil 3 : Der Teilgraph (V,E 0 ) ist kreisfrei.

28 2 Tiefen- und Breitensuche Beweis: Gäbe es einen Kreis, so müsste dieser irgendwann in Schritt 3 geschlossen werden. Die schließende Kante verbindet dann zwei Knoten, die schon in L 2 sind; in Schritt 3 werden aber nur Kanten zu E 0 hinzugefügt, bei denen ein Knoten zu diesem Zeitpunkt noch nicht in L 2 ist. Aus den drei bewiesenen Behauptungen folgt sofort die Aussage des Satzes. Eine einfache Variante des Algorithmus fügt die Knoten in Schritt 3 nicht ans Ende, sondern an den Anfang der Listen L 1 und L 2. Dieser Algorithmus wird auch als Tiefensuche bezeichnet. Algorithmus 2.2 Tiefensuche (engl. depth first search, DFS) Input: Zusammenhängender Graph G =(V,E). Output: Schritt 1: Schritt 2: Spannender Baum T =(V,E 0 )vong. Sei E 0 zunächst leer. Bereiten Sie zwei ebenfalls leere Knotenlisten L 1 und L 2 vor. Wählen Sie einen beliebigen Startknoten v 0 V und schreiben Sie v 0 in L 1 und L 2. Falls L 1 leer ist, dann STOPP und return T =(V,E 0 ). Ansonsten nehmen Sie den ersten Knoten v aus L 1. Schritt 3: Falls alle Nachbarknoten von v in L 2 sind, so löschen Sie v aus L 1. Ansonsten wählen Sie einen der Nachbarknoten w aus, der nicht in L 2 ist, schreiben Sie diesen an den Anfang der Listen L 1 und L 2 und fügen Sie die Kante (v, w) zue 0 hinzu. Schritt 4: Gehen Sie zu Schritt 2. Können Sie sich vorstellen, wie man auf die beiden Namen, Breiten- und Tiefensuche, gekommen ist? Probieren Sie die Algorithmen an dem folgenden Graphen aus (Abb. 2.9). Starten Sie dabei mit dem Knoten v 0 und vergleichen Sie anschließend die berechneten spannenden Bäume miteinander. v 0 Abb. 2.9: Welche Bäume berechnen die beiden Algorithmen BFS und DFS?

2.3 Anwendungen von BFS und DFS 29 2.3 Anwendungen von BFS und DFS In Abschnitt 1.2 hatten wir schon gesagt, dass der Zusammenhang eines Graphen einen Schlüsselbegriff darstellt. Bisher hatten wir jedoch noch keine Methode kennen gelernt, um einen Graphen auf seinen Zusammenhang zu überprüfen bzw. die einzelnen Zusammenhangskomponenten zu bestimmen. Mit Hilfe der beiden Algorithmen BFS und DFS ist das leicht möglich. Wie könnte ein solcher Algorithmus aussehen? Versuchen Sie auch zu begründen, warum der von Ihnen vorgeschlagene Algorithmus die unterschiedlichen Zusammenhangskomponenten bestimmt? 7 Aber nicht nur die einzelnen Zusammenhangskomponenten eines Graphen können durch spannende Bäume berechnet werden. Durch einen spannenden Baum, den wir aus der Breitensuche oder der Tiefensuche erhalten, kann auch überprüft werden, ob ein Graph bipartit ist oder nicht (Abschnitt 2.3.1). Außerdem haben die Bäume der Breitensuche eine ganz spezielle Eigenschaft: Wenn wir mit dem Knoten v 0 starten, so ist jeder Weg in dem Baum vom Knoten v 0 aus ein kürzester Weg bezüglich der Anzahl der Kanten (Abschnitt 2.3.2). Diese letzten beiden Anwendungen betrachten wir in den nächsten zwei Abschnitten genauer. 2.3.1 Erkennen von bipartiten Graphen In Beispiel 1.1 hatten wir bipartite Graphen schon vorgestellt. Ein Graph G =(V,E) heißtbipartit, wenn seine Knoten in zwei Teilmengen A und B zerlegt werden können, sodass nur Kanten zwischen den beiden Teilmengen und nicht innerhalb dieser verlaufen (Abb. 2.10). A B Abb. 2.10: Die Knotenmenge lässt sich in zwei Mengen zerlegen, wobei innerhalb der Mengen keine Kante verläuft. Bipartite Graphen treten häufig bei der Darstellung von Zuordnungsproblemen auf. Ein typisches Zuordnungsproblem hat jeder Personaler zu bewältigen: Den freien Arbeitsplätzen in seinem Unternehmen muss er geeignete Kandidaten bzw. Bewerber zuordnen. Oder auch die Zuweisung von Räumen an der Universität zu den unterschiedlichen Veranstaltungen kann über einen bipartiten Graphen modelliert werden. Mit solchen Problemen werden wir uns später genauer beschäftigen (Kapitel 12.2). In diesem Abschnitt soll es darum gehen, wie man bei einem gegebenen Graphen feststellen kann, ob er bipartit ist oder nicht. Eine einfache Charakterisierung über die in einem bipartiten Graphen enthaltenden Kreise macht dies möglich.

30 2 Tiefen- und Breitensuche Satz 2.3. Ein Graph ist genau dann bipartit, wenn er keinen Kreis ungerader Länge enthält. Der Beweis ist konstruktiv, d.h. er zeigt nicht nur, dass die Aussage stimmt, sondern enthält auch die Methode, einen Kreis ungerader Länge zu finden, falls er in dem Graphen vorhanden ist. Diese Methode basiert auf der Berechnung eines spannenden Baums. Beweis: Im Beweis gehen wir davon aus, dass der gegebene Graph G zusammenhängend ist. Wieso ist der Satz trotz dieser Einschränkung bewiesen? 8 x 2 e 2 y 2 C e2 x 1 C e1 e 1 v 0 y 1 G T Abb. 2.11: Der Abstand zu r in T definiert eine bipartite Partition von G (blaue und schwarze Knoten). Jede Kante e = (x, y) E(G)\G(T ) bildet einen Kreis C e von gerader Länge. Also müssen sowohl x 1 und y 1 als auch x 2 und y 2 in unterschiedlichen Komponenten liegen. : Wir zeigen als Erstes, dass ein zusammenhängender Graph G, der keinen Kreis ungerader Länge enthält, bipartit ist. Dazu teilen wir die Knoten V im FolgendeninzweiMengenA und B auf, sodass zwischen den beiden Mengen keine Kante verläuft. Für die Aufteilung benötigen wir einen spannenden Baum. Sei T G ein spannender Baum und v 0 ein beliebiger Knoten aus G. Dann definieren wir die Menge A als die Menge aller Knoten, die mit v 0 durch einen Weg ungerader Länge verbunden sind, und mit B die Menge aller Knoten, die mit v 0 durch einen Weg gerader Länge verbunden sind (Abb. 2.11). Diese Definition ist sinnvoll, da in T ein eindeutig bestimmter Weg von v 0 zu jedem Knoten existiert. Wir müssen nun zeigen, dass diese Aufteilung bipartit ist, d.h. dass keine Kante von G zwei Knoten aus A oder zwei Knoten aus B verbindet. Sei e =(x, y) eine beliebige Kante von G. Wir betrachten zwei Fälle: Fall 1 :Die Kante e ist eine Baumkante des spannenden Baums. Dann liegen x und y nach der Definition von A und B in unterschiedlichen Mengen. Fall 2 : Die Kante e ist eine Nichtbaumkante. Nehmen wir an, sie verbindet zwei Knoten aus derselben Menge, wie z.b. die Kante e 2 aus der Abbildung 2.11. Wieso kann diese Kante e 2 nicht im ursprünglichen Graphen G (der nur Kreise gerader Länge enthält) existiert haben? 9 Damit haben wir bewiesen, dass G bipartit ist.

http://www.springer.com/978-3-8274-2422-8