1 / 86

Graphen und ihre Verarbeitung

Graphen und ihre Verarbeitung. Klaus Becker 2010. Graphen. Teil 1. Vernetzte Strukturen. Routenplanung. Typisches Routenproblem: Wie kommt man am besten mit dem Auto von Worms nach Speyer?. Routenplanung mit dem Computer. Modellierungsproblem:

adora
Download Presentation

Graphen und ihre Verarbeitung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Graphen und ihre Verarbeitung Klaus Becker 2010

  2. Graphen

  3. Teil 1 Vernetzte Strukturen

  4. Routenplanung Typisches Routenproblem: Wie kommt man am besten mit dem Auto von Worms nach Speyer?

  5. Routenplanung mit dem Computer Modellierungsproblem: Wie wird das Verkehrsnetz im Computer repräsdentiert? Berechnungsproblem: Wie wird die optimale Route ermittelt?

  6. Beschreibung vernetzter Strukturen Modellierung: Will man die Information über ein solches Straßennetz beschreiben, so konzentriert man sich auf die relevanten Fakten und lässt alles andere erst einmal weg. Ist man z.B. nur an den Autobahnverbindungen um Ludwigshafen / Mannheim interessiert, so könnte eine abstrahierende Beschreibung des Autobahnnetzes wie folgt aussehen:

  7. Fachkonzept Graph Ein Graph besteht aus einer Menge von Knoten und einer Menge von Kanten (die jeweils zwei Knoten miteinander verbinden). Mathematisch: G = (V, E) V = {WO, KR-FR, ..., SP, ...} ist die Menge der Knoten. E = {{WO, KR-FR}, ... {SP, HO}, ...} ist die Menge der Kanten. Graphen dienen dazu, vernetzte Strukturen zu beschreiben. Die Knoten repräsentieren die Objekte des Anwendungsbereichs, die Kanten die Beziehungen zwischen den Objekten. Graphen sind ein wichtiges und häufig benutztes Modellierungsmuster in der Informatik (und Mathematik), das in ganz unterschiedlichen Anwendungsbereichen zum Einsatz kommt.

  8. Graph-Editor siehe: http://www.yworks.com/en/products_yed_about.html

  9. Graphen in Anwendungssituationen Aufgabe (a) Wie sind die Verbindungslinien zwischen den Fährhäfen hier zu deuten? Warum beschreiben sie nicht die tatsächlichen Schifffahrsrouten? Warum reicht hier eine abstrahierende Darstellung der Fährverbindungen? (b) Man möchte zusätzlich die Streckenlängen der Fährverbindungen angeben. Wie könnte man solche Informationen in der gezeigten Darstellung integrieren? siehe auch: http://www.ferrylines.com/de/europaeisches-buchungsportal-fuer-faehren/

  10. Graphen in Anwendungssituationen Aufgabe Wie kommt man über Land von Deutschland nach Finnland? Wie viele Ländergrenzen muss man dabei mindestens passieren? (a) Der (noch unfertige Graph) zeigt Deutschland und seine Nachbarländer. Trage erst einmal sämtliche noch fehlenden Nachbarländer in die bereits vorgegebenen Knoten ein. (b) Wie würde man die Kanten in der gezeigten Darstellung deuten? (c) Erweitere das Diagramm um die Nachbarländer von Polen usw., bis du das oben beschriebene Problem mit Hilfe des Graphen lösen kannst. (d) Wie kommt man über Land von Finnland nach Irland? Wie würde man das am Graphen erkennen? siehe auch: http://moritz.stefaner.eu/projects/relation-browser/relationViewer.swf

  11. Graphen in Anwendungssituationen Aufgabe In Königsberg (heute Kaliningrad) teilt der Fluss Pregel die Stadt in mehrere Stadtteile auf. Der Stadtplan hebt die Brücken hervor, die die Stadtteile miteinander verbinden. Der Mathematiker Euler beschäftigte sich mit der Frage, ob es einen Rundgang durch Königsberg gibt, der jede der sieben Brücken über den Fluss Pregel genau einmal benutzt. (a) Versuche erst einmal, das Problem von Euler zu lösen. (b) Der folgende Graph zeigt die Brückensituation in Königsberg in einer abstrahierenden Darstellung. Was stellen die Knoten des Graphen, was die Kanten dar? (c) Wie viele Kanten gehen von den jeweiligen Knoten aus? Was hat das mit der Lösung des Problems von Euler zu tun?

  12. Graphen in Anwendungssituationen An: Daniel Hallo Daniel, Rebekka hat dich als Freund/Freundin auf ... hinzugefügt. Wir benötigen deine Bestätigung, dass du Rebekka kennst, damit ihr Freunde/Freundinnen auf ... sein könnt. Viele Grüße vom ... Aufgabe (a) Beschreibe die Struktur des folgenden (siehe rechts Mitte) wer-kennt-wen-Netzwerks mit Hilfe eines Graphen. (b) Noch ein soziales Netzwerk (siehe rechts unten). Wie würde man hier die Vernetzungungsstruktur darstellen? (c) Bist du Mitglied in einem sozialen Netzwerk? Wie hoch ist dein Mitgliedsbeitrag? Nimm Stellung zu folgender Aussage: "Die Mitglieder zahlen mit ihren Daten." Rebekka kennt Daniel, Florian, Lisa, Greta, Sophie, Maria Daniel kennt Tim, Rebekka, Jonas Florian kennt Rebekka, Sophie Lisa kennt Rebekka, Sophie, Jonas Greta kennt Rebekka, Sophie, Tim Sophie kennt Rebekka, Florian, Lisa, Greta Maria kennt Rebekka Tim kennt Daniel, Greta Jonas kennt Daniel, Lisa Martin kennt Markus Markus kennt Martin Anna liebt Ben Ben liebt Clara Clara liebt Daniel Daniel liebt Anna

  13. Graphen in Anwendungssituationen Aufgabe Zum Nudelkochen im Ferienlager werden genau 2 Liter Wasser benötigt. Zum Abmessen stehen nur ein kleiner Eimer, der 3 Liter fasst, und einen etwas größerer Eimer, der 4 Liter fasst, zur Verfügung. Kann das funktionieren? Um systematisch alle durch Umfüllen erzeugbaren Wassermengen zu bestimmen, kann man einen Zustandsgraphen erstellen. Die Knoten des Graphen sind die aktuellen Füllinhalte der beiden Eimer. Die Kanten des Graphen stellen die Umfüllvorgänge dar. Vervollständige den bereits begonnenen Graphen. Ermittle mit diesem Graphen verschiedene Möglichkeiten, eine 2-Liter-Wassermenge durch Umfüllen zu erzeugen.

  14. Graphen in Anwendungssituationen Aufgabe Am Flussufer befinden sich ein Wolf, eine Ziege, ein Kohlkopf und ein Fährmann. Der Fährmann soll Wolf, Ziege und Kohlkopf auf die andere Seite des Flusses bringen. Er kann aber immer nur einn der drei mit an das andere Ufer nehmen und muss die beiden anderen so lange allein lassen. Da nun der Wolfe gerne die Ziege frisst und die Ziege auf den Kohlkopf scharf ist, kann der Fährmann diese Paarungen nicht allein lassen. Kann der Fährmann das Transportproblem lösen? Versuche, das Transportproblem systematisch zu lösen, indem du den bereits begonnenen Transport-Graphen vervollständigst.

  15. Graphenterminologie Je nach Anwendung ist es sinnvoll, Kanten gerichtet oder ungerichtet zu modellieren. Bei gerichteten Graphen werden in der Regel auch sog. Schlingen zugelassen. Werden die Kanten mit zusätzlichen Gewichten versehen, so spricht man von gewichteten oder bewerteten Graphen. E B E B 5 12 8 11 F F A A 6 D D 8 17 3 H H G G C C 5 gerichteter, unbewerteter Graph ungerichteter, bewerteter Graph

  16. Graphenterminologie In einem Multigraphen können Knoten über mehrere Kanten miteinander verbunden werden. Multigraph

  17. Graphenterminologie Ist in einem gerichteten Graphen ein Knoten über eine Kante mit einem anderen Knoten verbunden, so heißen dieser andere knoten Nachbar des Ausgangsknoten. In ungerichteten Graphen sind zwei Knoten Nachbarn, wenn sie über eine Kante miteinander verbunden sind. Ein Knoten, der keine Nachbarn hat, wird auch isolierter Knoten genannt. Ein Weg innerhalb eines Graphen ist eine Folge von Knoten des Graphen, die sukzessive über eine Kante miteinander verbunden sind. Ein einfacher Weg ist ein Weg, in dem - außer gegebenenfalls Startknoten und Endknoten - kein Knoten mehrfach vorkommt. Ein einfacher Weg heißt Kreis oder Zyklus, wenn der Startknoten des Weges gleichzeitig Endknoten ist.

  18. Übungen Aufgabe (a) Welche Nachbarn hat Knoten 1 (Knoten 2) im Beispielgraphen? (b) Gibt es im Beispielgraphen einen isolierten Knoten? (c) Verdeutliche am Beispielgraphen den Weg [1,4,1,3,2,2]. (d) Gib einen möglichst langen Weg im Beispielgraphen an. (e) Gib es Kreise im Beispielgraphen? Wenn ja, welche?

  19. Übungen Aufgabe "Die Leute vom Planeten Chator schreiben gern Schlechtes übereinander.Wer vielen über andere Schlechtes schreibt, gilt als besonders charmant. Aber natürlich nur, wenn die Kompromittierten nichts davon erfahren. Chatonen schreiben nur an Leute, die ihnen sympathisch sind. Doch die können den Tratsch weitertragen, und eventuell genau an den Falschen. Ein Chatone muss also gut aufpassen, dass er keinen Charmefehler macht. Dieses Missgeschick passierte unlängst Ator, als er Btor Schlechtes über Dtor schrieb. Zu dumm: Dtor ist dem Ctor sympathisch, der wiederum Btor sympathisch ist. Und so landete der Tratsch bei Dtor, der über Ator verständlicherweise sehr verärgert war. Dies hätte Ator mit ein wenig Übersicht vermeiden können, denn schließlich wissen alle Chatonen voneinander, wer wem sympathisch ist." (Quelle: Bundeswettbewerb Informatik 2004/2005 - 1. Runde) (a) Stelle die Sympathiebeziehungen der Chatonen mit einem gerichteten Graphen dar. (b) Welches Problem muss hier gelöst werden. Beschreibe es mit Hilfe der Graphenterminologie.

  20. Teil 2 Implementierung von Graphen

  21. Graphen als Daten Darstellen Deuten Verarbeiten >>> g = >>> sucheWeg(g, 'A', 'C')['A', 'B', 'C'] def sucheWeg(graph, start, ziel): ... return ...

  22. Graphen als Daten Aufgabe Betrachte den folgenden (gerichteten) Graphen. Wie könnte man diesen Graphen in Tabellenform / mit Hilfe von Listen beschreiben? Entwickle hierzu selbst Ideen. Darstellen >>> g =

  23. Nachbarschaftstabelle Sämtliche Informationen eines Graphen lassen sich in einer Nachbarschaftstabelle darstellen. Nachbarschaftstabelle Darstellen A B C D Kantenmatrix A 0 1 0 0 0 1 0 0 B 0 1 1 1 0 1 1 1 C 1 1 0 0 1 1 0 0 Adjazenzmatrix D 0 0 0 0 0 0 0 0 knotenliste = ['A', 'B', 'C', 'D']kantenmatrix = [[0, 1, 0, 0],[0, 1, 1, 1],[1, 1, 0, 0],[0, 0, 0, 0]]testgraph = (knotenliste, kantenmatrix)

  24. Nachbarschaftstabelle Aufgabe: (a) (einfach) Entwickle eine Funktion existiertKante(graph, vonKnoten, nachKnoten), die überprüft, ob es eine Kante zwischen den übergebenen Knoten gibt. Ein möglicher Testfall sollte so verlaufen: Tipp: Mit knotenliste.index('A') kann man den Index des übergebenen Bezeichners in der Knotenliste bestimmen. >>> existiertKante(testgraph, 'A', 'D')False (b) (etwas schwieriger) Entwickle eine Funktion getAlleNachbarn(graph, knoten), die sämtliche Nachbarn eines vorgegebenen Knotens ermittelt. Ein möglicher Testfall sollte so verlaufen: >>> getAlleNachbarn(testgraph, 'B')['B', 'C', 'D']

  25. Nachbarschaftslisten Sämtliche Informationen eines Graphen lassen sich in einer Nachbarschaftstabelle darstellen. Darstellen A: B Nachbarschaftslisten B: B C D C: B 1 0 Adjazenzlisten D: testgraph = \[ ['A', ['B']], ['B', ['B', 'C', 'D']], ['C', ['A', 'B']], ['D', []]]

  26. Nachbarschaftslisten Aufgabe: (a) (einfach) Entwickle eine Funktion getAlleNachbarn(graph, knoten), die sämtliche Nachbarn eines vorgegebenen Knotens ermittelt. Ein möglicher Testfall sollte so verlaufen: >>> getAlleNachbarn(testgraph, 'B')['B', 'C', 'D'] (b) (etwas schwieriger) Entwickle eine Funktion existiertKante(graph, vonKnoten, nachKnoten), die überprüft, ob es eine Kante zwischen den übergebenen Knoten gibt. Ein möglicher Testfall sollte so verlaufen: >>> existiertKante(testgraph, 'A', 'D')False Aufgabe: (c) (offen) Entwickle weitere Funktionen zur Verwaltung und Verarbeitung von Graphen, z.B.: addKnoten(...) # fügt einen neuen Knoten hinzudelKnoten(...) # löscht einen KnotenaddKante(...) # fügt eine neue Kante hinzu...

  27. Graph als Objekt Bisher wurde gezeigt, dass man Graphen auf unterschiedliche Weise mit Hilfe elementarer Datenstrukturen repräsentieren kann. Für die Verarbeitung von Graphen ist die gewählte Darstellung durchaus wichtig. Noch wichtiger ist es aber, über geeignete Operationen zur Verwaltung und Veränderung von Graphen zu verfügen, die - unabhängig von der zu Grunde liegenden Darstellung - die erforderiche Verarbeitung der Daten durchführen. Günstig ist es, hier objektoerientiert vorzugehen und eine Klasse Graph zu konzipieren, die die benötigten Operationen bereitstellt.

  28. Modellierung der Klasse Graph Ein Objekt der Klasse Graph soll die Knoten und Kanten eines Graphen verwalten. Zum einen soll es geeignete Operationen bereit stellen, um einen Graphen aufzubauen und zu verändern. Mit diesen Operationen soll man z.B. neue Knoten hinzufügen oder bereits vorhandene Knoten entfernen können. Zum anderen soll es Operationen bereit stellen, um an Informationen über den Graphen zu gelangen. So soll man mit einer geeigneten Operation ermitteln können, ob es den Knoten ... gibt oder ob es eine Kante von Knoten ... zu Knoten ... gibt. Aufgabe: Erstelle zunächst eine Liste mit den Operationen, die ein Objekt der Klasse Graph zur Verfügung stellen sollte. Ergänze dann das Klassendiagramm. Beschreibe die gewünschten Operationen möglichst genau.

  29. Implementierung der Klasse Graph Aufgabe: Ergänze die Implementierung der Klasse Graph. Du kannst auch eine Nachbarschaftstabelle zur Repräsentation des Graphen benutzen. Teste natürlich auch deine Implementierung der Klasse Graph. class Graph(object): def __init__(self): self.knotenMitNachbarn = [] def getAlleKnoten(self): knotenListe = [] for eintrag in self.knotenMitNachbarn: knotenListe = knotenListe + [eintrag[0]] return knotenListe def existiertKnoten(self, nameKnoten): if nameKnoten in self.getAlleKnoten(): return True else: return False # ...

  30. Nutzung der Klasse Graph Das Testprogramm unten zeigt, wie man eine (gegebene) Implementierung der Klasse Graph nutzen kann. from graph import * # Erzeugung des Graph-Objekts g = Graph() # Hinzufügen von Knoten und Kanten g.addKnoten('A') g.addKnoten('B') g.addKante('A', 'B') # Ausgabe der Nachbarschaftslisten for knoten in g.getAlleKnoten(): print(knoten, ':', g.getAlleNachbarn(knoten)) Aufgabe: Nutze die Implementierung der Klasse Graph, um den Graphen in der Abbildung zu erstellen. Nimm anschließend folgende Veränderungen am Graphen vor und kontrolliere die Ergebnisse: (1) Kante von B nach C löschen (2) Kante von C nach B löschen (3) Kante von C nach C hinzufügen (4) Knoten B löschen (5) Knoten C löschen

  31. Erweiterung der Klasse Graph Erweiterung: Verwaltung zusätzlicher Daten Zunächst einmal sind hier alle Kanten mit Gewichten versehen. Die Zahlen an den Kanten repräsentieren die Entfernung zwischen den Autobahnknotenpunkten. An einer der Kanten ist zusätzlich die Autobahnbezeichnung eingetragen. Auch diese Information ist für praktische Anwendungen oft wichtig. Interessant könnten auch die Geo-Koordinaten von Autobahnknotenpunkten sein. Diese würde man benötigen, wenn eine Darstellung auf einer Landkarte angestrebt würde. An einem der Knoten sind solche zusätzlichen Geo-Informationen eingetragen.

  32. Erweiterung der Klasse Graph Erweiterung: Speicherung der Daten in einer externen Datei Die Daten von Graphen werden während der Verarbeitung von einem Objekt der Klasse Graph verwaltet. Nach der Verarbeitung (wenn das Programm beendet ist) wird das Objekt vernichtet. Danach sind sämtliche Daten des verwalteten Graphen nicht mehr zugänglich. Wünschenswert ist eine Möglichkeit, die Daten eines Graphen in einer externen Datei abspeichern zu können und Daten einer externen Datei wieder einlesen zu können. Als externes Speicherformat benutzen wir im Folgenden GraphML, ein XML-basiertes Standardformat zur Repräsentation von Graphen. <?xml version="1.0" encoding="iso-8859-1"?> <graph id="bundesautobahnen Lu Ma"> <!--Knoten--> <node id="Kreuz Frankenthal"> <data key="lat">49.5534891</data> <data key="lon">8.3199207</data> </node> ... <!--Kanten--> <edge source="Kreuz Frankenthal" target="Viernheimer Dreieck"> <data key="A">A 6</data> <data key="entfernung">19</data> </edge> ... </graph>

  33. Erweiterung der Klasse Graph Die Klasse Graph wird um geeignete Operationen erweitert.

  34. Erweiterung der Klasse Graph Aufgabe Teste die erweiterte Klasse mit den Daten zum Autobahnnetz (siehe inf-schule). Aufgabe Teste die Klasse GraphMitDaten. Erzeuge ein Objekt, mit dem der folgende gewichtete Graph verwaltet wird. Die Daten des Graphen sollen auch in einer externen Datei gespeichert werden.

  35. Teil 3 Kürzeste Wege in Graphen

  36. Das Problem Viele Wege führen vom Kreuz Frankenthal zum Kreuz Heidelberg. Aber welcher dieser Wege ist der kürzeste? allgemein: Gegeben ist ein (gerichteter oder ungerichtetet, gewichteter) Graph. Gegeben ist zusätzlich ein Start- und ein Zielknoten. Welcher Weg des Graphen vom Startknoten zum Zielknoten ist der kürzeste. Dabei soll die Länge des Weges durch die Summe der Gewichte der Kanten längs des Weges erfasst werden.

  37. Ein vereinfachtes Problem Viele Wege führen vom Kreuz Frankenthal zum Kreuz Heidelberg. Aber welcher dieser Wege benötigt die wenigsten "Hops"? allgemein: Gegeben ist ein (gerichteter oder ungerichtetet) Graph. Gegeben ist zusätzlich ein Start- und ein Zielknoten. Welcher Weg des Graphen vom Startknoten zum Zielknoten führt über die geringste Anzahl an Zwischenknoten?

  38. Lösung des vereinfachten Problems Im Alltag kommt es gelegentlich vor, dass jemand sagt: "Den kenne ich um mehrere Ecken". Das heißt dann wohl, dass derjenige jemanden kennt, der wiederum jemanden kennt, der ... Ziel ist es, den "Bekanntheitsabstand" von Adriana zu Betül, Clara, Dominik, ..., Hannah zu bestimmen. Dabei soll direkte Bekanntschaft durch den Bekanntheitsabstand 1 beschrieben werden. Aufgabe: Versuche (ohne den Bekanntschaftsgraphen zu zeichnen), die gesuchten Bekannheitsabstände systematisch zu ermitteln. Beschreibe dein Vorgehen. Adriana kennt Clara, Erik, Greta Betül kennt Clara, Dominik Clara kennt Adriane, Dominik, Erik Dominik kennt Betül, Erik Erik kennt Dominik, Greta Fabian kennt Hannah Greta kennt Dominik, Hannah Hannah kennt Fabian

  39. Lösungsverfahren - Abstand

  40. Ein Lösungsverfahren # Vorbereitungfür alle Knoten knoten des Graphen: knoten.abstand = 'u'startKnoten.abstand = 0füge startKnoten in eine Liste zuVerarbeiten ein (hier grün)

  41. Ein Lösungsverfahren # Verarbeitung der KnotenSOLANGE die Liste zuVerarbeiten nicht leer ist:bestimme ausgewaehlterKnoten aus zuVerarbeitenentferne ausgewaehlterKnoten aus zuVerarbeiten (hier blau) für alle Nachbarn nachbarKnoten von ausgewaehlterKnoten: wenn nachbarKnoten.abstand == 'u': füge nachbarKnoten in die Liste zuVerarbeiten ein nachbarKnoten.abstand = ausgewaehlterKnoten.abstand + 1

  42. Ein Lösungsverfahren # Verarbeitung der KnotenSOLANGE die Liste zuVerarbeiten nicht leer ist:bestimme ausgewaehlterKnoten aus zuVerarbeitenentferne ausgewaehlterKnoten aus zuVerarbeiten (hier blau) für alle Nachbarn nachbarKnoten von ausgewaehlterKnoten: wenn nachbarKnoten.abstand == 'u': füge nachbarKnoten in die Liste zuVerarbeiten ein nachbarKnoten.abstand = ausgewaehlterKnoten.abstand + 1

  43. Ein Lösungsverfahren # Verarbeitung der KnotenSOLANGE die Liste zuVerarbeiten nicht leer ist:bestimme ausgewaehlterKnoten aus zuVerarbeitenentferne ausgewaehlterKnoten aus zuVerarbeiten (hier blau) für alle Nachbarn nachbarKnoten von ausgewaehlterKnoten: wenn nachbarKnoten.abstand == 'u': füge nachbarKnoten in die Liste zuVerarbeiten ein nachbarKnoten.abstand = ausgewaehlterKnoten.abstand + 1

  44. Ein Lösungsverfahren # Verarbeitung der KnotenSOLANGE die Liste zuVerarbeiten nicht leer ist:bestimme ausgewaehlterKnoten aus zuVerarbeitenentferne ausgewaehlterKnoten aus zuVerarbeiten (hier blau) für alle Nachbarn nachbarKnoten von ausgewaehlterKnoten: wenn nachbarKnoten.abstand == 'u': füge nachbarKnoten in die Liste zuVerarbeiten ein nachbarKnoten.abstand = ausgewaehlterKnoten.abstand + 1

  45. Lösungsverfahren - Abstand / Herkunft

  46. Algorithmus von Moore ALGORITHMUS # von MooreÜbergabedaten: Graph, startKnoten, zielKnoten # Vorbereitung des Graphen für alle knoten des Graphen: setze abstand auf 'u' setze herkunft auf None setze abstand von startKnoten.abstand auf 0 füge startKnoten in eine Liste zuVerarbeiten ein # Verarbeitung der Knoten SOLANGE die Liste zuVerarbeiten nicht leer ist: bestimme einen Knoten ausgewaehlterKnoten aus zuVerarbeiten (z.B. den ersten in der Liste) entferne ausgewaehlterKnoten aus zuVerarbeiten für alle nachbarKnoten von ausgewaehlterKnoten: wenn abstand von nachbarKnoten == 'u': füge nachbarKnoten in die Liste zuVerarbeiten ein (z.B. am Listenende) neuerAbstand = (abstand von ausgewahlterKnoten) + 1 setze abstand von nachbarKnoten auf neuerAbstand setze herkunft von nachbarKnoten auf ausgewaehlterKnoten weglaenge = abstand von zielKnoten # Erzeugung des Weges zum zielKnoten weg = [] knoten = zielKnoten SOLANGE knoten != startKnoten und herkunft von knoten != None: weg = [(herkunft von knoten, knoten)] + weg knoten = herkunft von knoten Rückgabedaten: (weg, weglaenge)

  47. Exkurs "Graph durchlaufen" {Eingabe: Graph G; Startknoten s des Graphen} für alle Knoten w      markiere w als nicht besucht füge s in eine (zunächst leere) Datenstruktur D ein solange D nicht leer ist      entnimm einen Knoten w aus D      für alle Kanten {w,u}   falls u nicht markiert ist     markiere u     füge u in D ein {Ausgabe: Markierungen für alle Knoten w von G; ein Knoten ist genau dann als 'besucht' markiert, wenn er üben einen Weg mit s verbindbar ist} Quelle: http://www.matheprisma.uni-wuppertal.de/Module/Graphen/index.htm

  48. Beispiel B 0 B F F 0 0 D D 0 C C E E A A S S 0 Vorbereitungsschritt 0 1 markiere alle Knot. als nicht besucht (hier 0) markiere S als besucht (hier 1) füge s in e. Datenstruktur D (hier grün) ein entnimm einen Knoten w (hier blau) aus D für alle Kanten {w,u} falls u nicht markiert ist     markiere u     füge u in D ein Wiederholungsschritt 0 B 0 B F F 0 0 0 0 D D 0 1 C C E E A A S S 0 1 0 0 1 1

  49. Beispiel 0 B 0 B 0 B F F F 0 0 0 0 1 1 D D D 1 1 1 C C C E E E A A A S S S 1 1 1 0 0 1 1 1 1 entnimm einen Knoten w (hier blau) aus D für alle Kanten {w,u} falls u nicht markiert ist     markiere u     füge u in D ein Auswahlstrategie First InFirst Out -> Breitensuche Auswahlstrategie Last InFirst Out -> Tiefensuche 0 B 0 B 1 B F F F 0 0 0 1 1 1 D D D 1 1 1 C C C E E E A A A S S S 1 1 1 0 1 1 1 1 1

  50. Beispiel 1 B 1 B F F 0 0 1 1 D D 1 1 C C E E A A S S 1 1 1 1 1 1 entnimm einen Knoten w (hier blau) aus D für alle Kanten {w,u} falls u nicht markiert ist     markiere u     füge u in D ein Ergebnis:Von S aus gibt es Wege zu den folgenden Knoten: A, B, C, D, E. 1 B 1 B F F 0 0 1 1 D D 1 1 C C E E A A S S 1 1 1 1 1 1

More Related