Springe zum Inhalt oder Footer
SerloDie freie Lernplattform

Kurs

Dijkstra-Wichtel für den Weihnachtsmann

1 Übersicht

In diesem Kurs lernst du den Dijkstra-Algorithmus und eine mögliche Anwendung davon kennen: Finde effiziente Wege durch ein Straßennetz mit dem Dijkstra-Algorithmus!

Bild

Benötigtes Vorwissen:

  • Graphen (Begriff Knoten, Kante, Kantengewicht)

Bearbeitungszeit:

ca 30 Min

2 Hilfe für den Weihnachtsmann

Um den Weihnachtsmann zu entlasten, bekommt der Wichtel Dijkstra Jr. die Aufgabe, die Dörfer rund um die Werkstatt am Nordpol mit Geschenken zu beliefern.

Graph mit Straßennetz um Weihnachtswerkstatt

Die Knoten des Graphen stehen auf dieser Karte für die einzelnen Dörfer, die Zahlen an den Kanten sind die Längen der (in der Realität natürlich nicht so geraden) Straßen in Kilometern.

3 Planung von Dijkstra Jr.

Dijkstra Jr. hat ein paar Freunde versammelt, die ihn unterstützen sollen und macht sich mit ihnen an die Routenplanung.

Sein Ziel: Für jedes Gebiet in der Nachbarschaft möchte er den kürzesten Weg von der Weihnachtswerkstatt dorthin finden, um so effiziente Routen zu planen.

Überlegung: Bevor du einen Algorithmus kennenlernst, der dieses Problem auch für sehr große Graphen lösen kann, kannst du für dieses einfache Beispiel selbst eine Lösung finden. Notiere dir für jedes Dorf im Graphen den kürzesten Weg von der Werkstatt zu diesem Ort.

leere Tabelle zu kürzesten Wegen

4 Vorbereitung Dijkstra-Algorithmus

Dijkstra Jr. benutzt den bekannten Familien-Algorithmus, den Dijkstra-Algorithmus, um die kürzesten Wege zu bestimmen. Du hilfst ihm dabei.

Graph mit Straßennetz um Weihnachtswerkstatt

Vorbereitung

Schreibe in eine Tabelle alle Knoten des Graphen (alle Städte) und lege als Startdistanz für alle Städte außer für den Ausgangspunkt den Wert unendlich ()\left(\infty\right) fest.

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Nein

0

-

Schlittenstadt

Nein

\infty

Kugelkaff

Nein

\infty

Winterweiher

Nein

\infty

Dominodorf

Nein

\infty

Plätzchen-Port

Nein

\infty

5 Distanz senken und nächsten Ort heraussuchen

Zunächst kannst du für jeden Ort, der direkt mit der Werkstatt verbunden ist, die Distanz von \infty⁣, auf die angegebenen km senken und diesen Ort als abgehandelt markieren. In diesem ersten Schritt sind alle Distanzen automatisch kürzer als die zuerst festgelegte und du musst deshalb nichts nachrechnen oder überprüfen.

Anschließend suchst du unter den gerade markierten Orten das Dorf heraus, das die kürzeste Distanz zum Startknoten (also der Werkstatt) hat und noch nicht besucht wurde. Dieser Ort ist Schlittenstadt. Markiere ihn als neuen aktuellen Knoten (rot umrandet in Grafik, fett in Tabelle).

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt, abgehandelt)

Ja

0

-

Schlittenstadt (aktueller Ort)

Nein

3

Werkstatt

Kugelkaff

Nein

10

Werkstatt

Winterweiher

Nein

7

Werkstatt

Dominodorf

Nein

\infty

Plätzchen-Port

Nein

\infty

Graph mit Straßennetz um Weihnachtswerkstatt

6 Nächsten Ort untersuchen

Vom aktuellen Ort werden wieder alle erreichbaren Orte untersucht. Falls die Distanz kleiner ist als die aktuell eingetragene, wird die Tabelle verändert.

Da der Weg nach Winterweiher über Schlittenstadt mit 8 km (3km +5km) länger ist als die Straße von der Werkstatt aus (7 km), verändert sich nichts in der Tabelle.

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt (aktueller Ort)

Ja

3

Werkstatt

Kugelkaff

Nein

10

Werkstatt

Winterweiher

Nein

7

Werkstatt

Dominodorf

Nein

\infty

Plätzchen-Port

Nein

\infty

Graph mit Straßennetz um Weihnachtswerkstatt

7 Nächsten Ort heraussuchen

Wähle aus der Tabelle den Ort aus, der die kleinste Distanz zum Startort hat und noch nicht untersucht wurde. Dieser Ort ist Winterweiher. Markiere ihn als aktuellen Ort:

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt

Ja

3

Werkstatt

Kugelkaff

Nein

10

Werkstatt

Winterweiher (aktueller Ort)

Nein

7

Werkstatt

Dominodorf

Nein

\infty

Plätzchen-Port

Nein

\infty

Graph mit Straßennetz um Weihnachtswerkstatt

8 Nächsten Ort untersuchen

Von Winterweiher aus können Kugelkaff und Plätzchen-Port erreicht werden.

Die Route nach Kugelkaff ist allerdings mit 22 km länger als die bisherige (10 km).

Die Route nach Plätzchen-Port ist kürzer und wird deshalb in der Tabelle vermerkt:

Graph mit Straßennetz um Weihnachtswerkstatt

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt

Ja

3

Werkstatt

Kugelkaff

Nein

10

Werkstatt

Winterweiher (aktueller Ort)

Ja

7

Werkstatt

Dominodorf

Nein

\infty

Plätzchen-Port

Nein

11

Winterweiher

9 Nächsten Ort aussuchen

Wähle aus der Tabelle den Ort aus, der die kleinste Distanz zum Startort hat und noch nicht untersucht wurde. Dieser Ort ist Kugelkaff. Markiere ihn als aktuellen Ort:

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt

Ja

3

Werkstatt

Kugelkaff (aktueller Ort)

Nein

10

Werkstatt

Winterweiher

Ja

7

Werkstatt

Dominodorf

Nein

\infty

Plätzchen-Port

Nein

11

Winterweiher

Graph mit Straßennetz um Weihnachtswerkstatt

10 Nächsten Ort untersuchen

Der Weg von Kugelkaff nach Winterweiher ist länger (25 km) als der bisher gefundene (7km).

Der Weg nach Dominodorf wird mit 16 km in der Tabelle ergänzt.

Graph mit Straßennetz um Weihnachtswerkstatt

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt

Ja

3

Werkstatt

Kugelkaff (aktueller Ort)

Ja

10

Werkstatt

Winterweiher

Ja

7

Werkstatt

Dominodorf

Nein

16

Kugelkaff

Plätzchen-Port

Nein

11

Winterweiher

11 Nächsten Ort aussuchen

Jetzt hast du zwar zu jedem Dorf einen Weg gefunden, dieser muss aber nicht der kürzeste sein! Du musst alle Knoten einmal untersucht haben, damit der Dijkstra-Algorithmus das gesuchte Ergebnis liefert.

Wähle deshalb erneut aus der Tabelle den Ort aus, der die kleinste Distanz zum Startort hat und noch nicht untersucht wurde. Dieser Ort ist Plätzchen-Port. Markiere ihn als aktuellen Ort:

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt

Ja

3

Werkstatt

Kugelkaff

Ja

10

Werkstatt

Winterweiher

Ja

7

Werkstatt

Dominodorf

Nein

16

Kugelkaff

Plätzchen-Port (aktueller Ort)

Nein

11

Winterweiher

Graph mit Straßennetz um Weihnachtswerkstattd3e

12 Nächsten Ort untersuchen

Der Weg nach Dominodorf von Plätzchen-Port aus ist um 1 km kürzer als von Kugelkaff aus. Die Tabelle wird entsprechend aktualisiert.

Graph mit Straßennetz um Weihnachtswerkstattd3e

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt

Ja

3

Werkstatt

Kugelkaff

Ja

10

Werkstatt

Winterweiher

Ja

7

Werkstatt

Dominodorf

Nein

14

Plätzchen-Port

Plätzchen-Port (aktueller Ort)

Ja

11

Winterweiher

13 Letzten Ort untersuchen und Routen ableiten

Auch Dominodorf muss noch untersucht werden. Allerdings verändern sich die Wege dadurch nicht: Nach Kugelkaff wären es 20 km, nach Plätzchen-Port 17 km.

Die finalen Distanzen zwischen der Werkstatt und allen Städten sehen also wie folgt aus:

Ort

Abgehandelt

Distanz

Vorgänger

Werkstatt (Startpunkt)

Ja

0

-

Schlittenstadt

Ja

3

Werkstatt

Kugelkaff

Ja

10

Werkstatt

Winterweiher

Ja

7

Werkstatt

Dominodorf

Ja

14

Plätzchen-Port

Plätzchen-Port

Ja

11

Winterweiher

Beachtet man die Vorgänger, ergeben sich daraus folgende Routen:

finale Routen nach Dijkstra

14 Ablauf auf einen Blick

Beim Vorgehen von Dijkstra Jr. handelt es sich um einen Algorithmus. Das heißt, er lässt sich zum Beispiel mithilfe eines Struktogramms übersichtlich beschreiben und darstellen. Alle Handlungen, die du in den letzten Schritten mit den Wichteln durchgeführt hast, lassen sich "formal" so aufschreiben:

Struktogramm zum Dijkstra-Algorithmus

15 Abschließende Übung

Laden


Dieses Werk steht unter der freien Lizenz
CC BY-SA 4.0Was bedeutet das?