7. Algorithmus der Woche Kürzeste Wege Wie komme ich am schnellsten von einem Ort zu einem anderen?

Ähnliche Dokumente
Kürzeste Wege. Peter Sanders, Johannes Singler

Berechnung kürzester Wege

Kürzeste Wege in einem gewichteten Graphen. Anwendungen

Kürzeste-Wege-Algorithmen und Datenstrukturen

Kürzeste und Schnellste Wege

Organisatorisches. Programmierpraktikum Das Canadian Traveller Problem. Organisatorisches. Organisatorisches

12. Der Algorithmus von Dijkstra. Informatik II für Verkehrsingenieure

Routing A lgorithmen Algorithmen Begriffe, Definitionen Wegewahl Verkehrslenkung

Lernmodul 7 Algorithmus von Dijkstra

10. Übungsblatt zu Algorithmen I im SS 2010

Routing in Nahverkehrsnetzen

9. Algorithmus der Woche Die Eulertour Wie Leonhard Euler das Haus vom Nikolaus zeichnet

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / 2014 Vorlesung 13, Donnerstag, 30.

M. Anderegg, E. Müller Graphentheorie

14. Algorithmus der Woche Gewinnstrategie für ein Streichholzspiel

Routing Algorithmen. Begriffe, Definitionen

Algorithmen. Von Labyrinthen zu. Gerald Futschek

Von Labyrinthen zu Algorithmen

Kapitel 3: Kürzeste Pfade Gliederung der Vorlesung

8.4 Digraphen mit negativen Kantengewichten Grundsätzliches Betrachte Startknoten s und einen Kreis C mit Gesamtlänge < 0.

Algorithmen. Gerald Futschek. Algorithmen prolog der Informatik

Das Problem des Handlungsreisenden

1 Kürzeste Pfade in Graphen

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 15/16

Bipartite Graphen. Beispiele

Algorithmen und Datenstrukturen 2

WS 2009/10. Diskrete Strukturen

Kap. 6.6: Kürzeste Wege

Informatik II: Algorithmen und Datenstrukturen SS 2013

Kap. 6.6: Kürzeste Wege

Von Labyrinthen zu Algorithmen 2. Gerald Futschek

Schnelle und genaue Routenplanung

Kapitel 4: Netzplantechnik Gliederung der Vorlesung

2. Das single-source-shortest-path-problem

Kürzeste und Schnellste Wege

16. November 2011 Zentralitätsmaße. H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 87

Algorithmen. Von Labyrinthen zu. Gerald Futschek

7. Lineare Gleichungssysteme

Algorithmen. Von Labyrinthen zu. Gerald Futschek

Primzahlen und Programmieren

VERSUCH 1. Lineal Matheheft Faden Schere Heftzwecke. Was beobachtest du? Warum ist das so? VERSUCH 2

Datenstrukturen und Algorithmen (SS 2013)

8. Algorithmus der Woche Topologisches Sortieren Mit welcher Aufgabe meiner ToDo-Liste fange ich an?

Algorithmen 3. Algorithmen prolog der Informatik

20. Sächsische Physikolympiade 1. Stufe Klassenstufe 6

Graphentheorie. Yichuan Shen. 10. Oktober 2013

23. Algorithmus der Woche Maximale Flüsse Die ganze Stadt will zum Stadion

26. Algorithmus der Woche Der One-Time-Pad-Algorithmus Der einfachste und sicherste Verschlüsselungsalgorithmus

Graphdurchmusterung, Breiten- und Tiefensuche

Schnellste Wege Wie funktioniert ein Navi?

Konzepte der Informatik

Informatik im Alltag: Wie funktionieren Navis?

Genauer Hochleistungs-Routenplaner

Backtracking mit Heuristiken

12. Graphen Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013

Schnelle und genaue Routenplanung

2. Teil: Programmierung der Roboter

Algorithmen und Datenstrukturen in der Bioinformatik Viertes Übungsblatt WS 05/06 Musterlösung

Wie wird ein Graph dargestellt?

Graphentheorie. Vorkurs Informatik WS 2016/2017. Dennis Aumiller

Kürzeste (billigste) Wege

6. Texterkennung in Videos Videoanalyse

Beispiele und Übungen Erreichbarkeit, Routenwahl und Umlegung

2. Sofortflug: Mit der Cessna Amphibian durch die Rocky Mountains. Flug auswählen. Ansonsten wählen Sie den Menüeintrag Flüge/Flug auswählen aus.

Vorkurs Informatik WiSe 16/17

Algorithmen & Komplexität

ABITURPRÜFUNG 2001 GRUNDFACH INFORMATIK (HAUPTTERMIN)

Problem Kollisionsvermeidung. Verkehr zeitoptimal routen. Gegenverkehr & Überholen Ausweich-Stellen um Kontrahenten passieren zu lassen.

Konzepte der Informatik

4.7 Der Algorithmus von Dinic für maximalen Fluss

4. Algorithmus der Woche Zahlen auf Deutsch aussprechen Wie macht das ein Auto-Navigationssystem?

Das Brachystochronen-Problem

Vorlesung Datenstrukturen

Matchings in Graphen. Praktikum Diskrete Optimierung (Teil 5)

Software Entwicklung 1. Graphen. Motivation. Definitionen: Graph. Annette Bieniusa / Arnd Poetzsch-Heffter

Berechnung von Abständen

Guten Morgen und Willkommen zur Saalübung!

Viertes Übungsblatt - Musterlösung

Traversierung 1 / 16. P.F. Stadler & S. Will (Bioinf, Uni LE) ADS 2, V3 23. April / 16

Graphalgorithmen II. Sebastian Ehrenfels Sebastian Ehrenfels Graphalgorithmen II / 44

Konzepte der Informatik

Die Papierspirale (1) Stand: 08.Oktober 2014

9. Übungsblatt zu Algorithmen I im SoSe 2016

Was hat eine Spritzpistole mit einer Tragfläche zu tun? Formuliert eine Vermutung.

Algorithmische Methoden zur Netzwerkanalyse

Gibt es in Königsberg einen Spaziergang, bei dem man jede der. Pregelbrücken. überquert?

Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14

Teil 2: Graphenalgorithmen

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Erinnerung VL

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

Klausur zur Vorlesung Künstliche Intelligenz

Einführung in die Informatik 2

Vektorrechnung. 10. August Inhaltsverzeichnis. 1 Vektoren 2. 2 Grundlegende Rechenoperationen mit Vektoren 3. 3 Geometrie der Vektoren 5

Fortgeschrittene Netzwerk- und Graph-Algorithmen

1 Die drei Bewegungsgleichungen

Grundlagen: Algorithmen und Datenstrukturen

Transkript:

7. Algorithmus der Woche Kürzeste Wege Wie komme ich am schnellsten von einem Ort zu einem anderen? Autor Peter Sanders, Universität Karlsruhe Johannes Singler, Universität Karlsruhe Stephan Kupferer, Universität Karlsruhe Ich bin gerade nach Karlsruhe in meine erste Studentenbude gezogen. So eine Großstadt ist schon ziemlich kompliziert. Einen Stadtplan habe ich zwar schon, aber wie finde ich heraus, wie ich am schnellsten wohin komme? Ich fahre zwar gerne Fahrrad, aber ich bin notorisch ungeduldig, deshalb brauche ich den wirklich kürzesten Weg - zur Uni, zu meiner Freundin... Ich gehe die Planung also systematisch an. So könnte es gehen: Ich breite den Stadtplan auf einem Tisch aus und lege dünne Fäden entlang der Straßen. Diese werden an Kreuzungen und Abzweigungen miteinander verknotet. Der Einfachheit halber mache ich außerdem Knoten an allen möglichen Start- und Zielpunkten sowie an den Enden von Sackgassen. Jetzt kommt der Trick: Ich fasse das entstandene Gespinst dort, wo ich starte, und ziehe diesen Knoten langsam nach oben. Nach und nach lösen sich die anderen Knoten von der Tischplatte. Ich habe die Knoten beschriftet, so dass ich immer noch weiß, welcher Knoten wohin gehört. Schließlich hängt alles senkrecht unter dem Startknoten. Jetzt habe ich leichtes Spiel: Um einen kürzesten Weg von meinem Startpunkt zu einem Zielpunkt zu finden, muss ich nur den Zielpunkt ausfindig machen und straff gespannte Fäden nach oben bis zum Startpunkt zurückverfolgen. Der Abstand zwischen Start- und Zielpunkt lässt sich außerdem einfach mit einen Maßband abmessen. Der so gefundene Weg muss der kürzeste sein, denn gäbe es einen noch kürzeren, hätten sich Start und Ziel nie so weit voneinander entfernt (ohne Fäden zu zerreißen). Kürzeste Wege Seite 1 von 5 Peter Sanders, Johannes Singler

Nehmen wir zum Beispiel an, ich möchte den kürzesten Weg von der Mensa (M) zum Rechenzentrum (F) herausfinden. Ich hebe das Netz also am Knoten M immer weiter an, wobei sich Knoten für Knoten vom Tisch löst. Sobald Knoten F in der Luft hängt, kann ich aufhören. In nebenstehender Zeichnung ist das Gewirr aufgezeichnet, zur Verbesserung der übersichtlichkeit aber ein bisschen auseinander gezogen, nicht ganz senkrecht. Man erkennt, dass der kürzeste Weg von M nach F über G führt. Zwischen L und K hat sich bereits eine durchhängende Schlaufe gebildet, die sich auch nicht mehr spannen wird. Das bedeutet, dass kein kürzester Weg von M aus über diese Verbindungen läuft. Ich habe das ganze für die Umgebung meiner Uni erfolgreich getestet. Aber schon mein erster Versuch mit ganz Karlsruhe ist kläglich an verhedderten Bindfäden gescheitert. Ich habe die halbe Nacht gebraucht, um die Fäden zu entwirren und erneut auf dem Stadtplan auszulegen. Am nächsten Tag ist mein kleiner Bruder zu Besuch. Kein Problem, meint er. Er habe die nötige Technologie, um das Problem zu lösen. Er packt seinen Chemiebaukasten aus und tränkt die Fäden mit einer mysteriösen Flüssigkeit. O weh! Er zündet das Gespinst am Startpunkt an. In den nächsten Sekunden verschwindet das Zimmer in einer Rauchwolke. Er hat aus den Fäden Zündschnüre gemacht. Er erklärt mir voller Stolz, was das soll: Alle Fäden brennen gleich schnell. Also ist der Zeitpunkt, zu dem ein Knoten Feuer fängt, proportional zur Entfernung vom Startpunkt. Außerdem enthält die Richtung, aus der ein Knoten Feuer fängt, die gleiche Information wie die gespannten Fäden bei meinem Ansatz mit dem hängenden Gespinst. Toll! Leider hat er vergessen, eine Videoaufnahme des Infernos zu machen. Jetzt haben wir nur einen Haufen Asche. Selbst mit einem Video wäre es unmöglich, das Gleiche von anderen Startpunkten zu wiederholen. Die Abbildung rechts zeigt immerhin ein Momentanbild, nachdem die Flammen von Startpunkt M ein Stück weit gekommen sind. An manchen Stellen laufen sie sogar wieder aufeinander zu und vernichten sich irgendwann gegenseitig. Nachdem ich diesen Pyromanen hochkant aus meiner Bude geworfen habe, beginne ich nachzudenken. Ich muss meine Scheu vor Abstraktion überwinden und das Ganze meinem dämlichen Computer verkli- Kürzeste Wege Seite 2 von 5 Peter Sanders, Johannes Singler

ckern. Das hat aber auch Vorteile. Fäden, die es nicht gibt, können sich nicht verheddern oder abbrennen. Mein Prof hat mir gesagt, dass ein Herr Dijkstra einen Algorithmus, der das Kürzeste-Wege-Problem ganz ähnlich wie das Bindfadenverfahren löst, schon 1959 aufgeschrieben hat. Netterweise kann man den Algorithmus von Dijkstra in der Bindfadenterminologie beschreiben. Zu jedem Knoten muss mein Computer lediglich die von ihm ausgehenden Fäden zu benachbarten Knoten und deren Länge kennen. Er verwaltet außerdem eine Tabelle d, die zu jedem Knoten seinen Abstand zum Zielknoten abschätzt (d. h. die Entfernung ist höchstens so groß wie der entsprechende Eintrag in d). Bei hängenden Knoten ist das auch die endgültige Länge des kürzesten Weges. Bei Nachbarn hängender Knoten gibt d die Länge der kürzesten Verbindung an, welche nur über hängende Knoten geht. Nennen wir diese Knoten liegend. Bei den anderen, bisher unerreichten Knoten, ist d gleich unendlich. Anfangs ist also d[startknoten] = 0. 1 function KÜRZESTEWEGE(X) 2 alle Knoten liegen, alle d[] sind unendlich, nur d[startknoten]=0 3 while es liegende Knoten gibt do 4 v := der liegende Knoten mit kleinstem d[v] 5 mache v hängend 6 for all Fäden von v zu einem Nachbarn u der Länge L do 7 if d[v]+l < d[u] then d[u] = d[v]+l {kürzerer Weg hin zu u gefunden, führt über v} 8 endfor 9 endwhile 10 end Was hat dieser Algorithmus mit dem Prozess des langsamen Hochhebens des Startknotens zu tun? Jede Iteration der while-schleife entspricht dem Übergang eines Knotens v von liegend nach hängend. Da d[v] den Abstand vom Startknoten zu v mittels hängender Fäden angibt, ist der jeweils nächste angehobene Knoten derjenige mit dem kleinsten d[v] Wert. Dieser Wert entspricht der Höhe des Startknotens, bei dem v hängend wird. Da andere, später angehobene Fäden diese Höhe nicht mehr verkleinern können, entspricht d[v] auch der entgültigen Entfernung vom Start zu v. (Dieses Argument funktioniert allerdings nur für den Knoten mit dem jeweils kleinsten d[v] Wert.) Ein richtig genialer Zug von Dijkstras Algorithmus ist, dass die d[u]-werte der anderen Knoten sich sehr einfach anpassen lassen, wenn v hängend wird. Lediglich die von v ausgehenden Fäden müssen betrachtet werden. Dies erledigt die innere for-schleife. Eine Faden zwischen v und einem Nachbarknoten u mit Länge L ergibt eine Verbindung vom Startknoten zu u der Länge d[v] + L. Wenn dieser Wert kleiner ist, als der bisherige Wert von d[u], wird d[u] entsprechend verringert. Am Ende hängen alle überhaupt vom Startknoten aus erreichbaren Knoten und die d[v]-werte geben die kürzesten Weglängen an. Das folgende Applet führt den Algorithmus von Dijkstra interaktiv aus. Ein Klick auf Schritt führt einen Schritt durch, Komplett führt den Algorithmus bis zum Ende aus. Weiße und blaue Knoten liegen noch auf dem Tisch, wobei die blauen mit bereits hängenden verbunden sind. Die orangenen Knoten hängen in der Luft. In den Knoten steht das aktuelle d[]. Nach Beendigung des Algorithmus muss man vom Zielknoten aus den roten Fäden entlang rückwärts gehen, um den kürzesten Weg zu finden. Das ist eindeutig und führt auf jeden Fall zum Startknoten. Versuchen Sie doch einmal, den Bindfadenzustand der zweiten Abbildung damit zu rekonstruieren. Für das Karlsruhe-Beispiel entspricht eine Abstands-Einheit übrigens ca. 10m in der Realität. Als weitere Beispiele können Sie noch ein abstraktes Netz sowie einen klitzekleinen Ausschnitt aus einem Routenplaner für Deutschland auswählen. Kürzeste Wege Seite 3 von 5 Peter Sanders, Johannes Singler

Folgende Abbildung zeigt den Zustand des Algorithmus nach 10 Schritten, also entsprechend der Bindfadenabbildung. Dieser Algorithmus lässt sich leicht so erweitern, dass auch die kürzesten Wege rekonstruiert werden können: Immer wenn d[u] neu gesetzt wird, merken wir uns den Knoten v, der dafür verantwortlich war, als Vorgänger p[v]. Später rollen wir durch Zurückverfolgen der Vorgängerverweise die Route vom Ziel zum Start auf. Natürlich gibt es eine viele lose Enden, die wir auf so engem Raum nicht verfolgen können. Deshalb erfolgt hier ein Verweis auf weitere Informationen. Kürzeste Wege Seite 4 von 5 Peter Sanders, Johannes Singler

Autor: Prof. Dr. rer. nat. Peter Sander http://algo2.iti.uni-karlsruhe.de/343.php Dipl.-Inform. Johannes Singler http://algo2.iti.uni-karlsruhe.de/350.php Externe Links: Applet und zusätzliche Informationsseite der Autoren http://algo2.iti.uni-karlsruhe.de/singler/algorithmus-der-woche/ informationen.html Kürzeste Wege Seite 5 von 5 Peter Sanders, Johannes Singler