Startseite    
MathematikPoolNRW Projekt Hintergründe Kontakt


Animation des Dijkstra-Algorithmus

Das folgende Beispiel illustriert den Ablauf des Verfahrens:   <<< Dijkstra.gato >>>

Die Animation des Algorithmus erfolgt mittels Gato.
Die Anweisungen werden im Algorithmusfenster in der Programmiersprache Python angezeigt.
Im Graphenfenster wird die Probleminstanz, also der Graph, auf dem der Algorithmus abläuft, und die Arbeitsweise des Algorithmus detailliert visualisiert.

Der Ablauf kann vom Benutzer mittels der von "Debuggern" bekannten Eingriffsmöglichkeiten gesteuert werden. Der Algorithmus kann vollständig oder zeilenweise ablaufen. Die Ausführung kann an sogennannten, vom Benutzer zu definierenden "Stopmarken" unterbrochen werden.
Die Auswirkungen der Anweisungen in einer Zeile auf den Graphen werden durch Änderungen von Kanten- und Knotenfarben und weitere optische Signale im Graphenfenster unmittelbar verdeutlicht. Hierdurch lassen sich die Zusammenhänge zwischen den Vorschriften des Algorithmus und den Auswirkungen auf die Problemimstanz direkt und schnell erfassen.

Desweiteren ist Gred, ein einfacher Grapheneditor zur interaktiven Erstellung und Veränderung von Graphen, in Gato integriert. Gred kann durch Auswahl des Menüpunkts New Graph im Menü Files gestartet werden. Nach Erstellung eines Graphen muss dieser auf der Festplatte in einem beliebigen Verzeichnis abgespeichert werden und kann dann anschließend in Gato durch Auswahl des Menüpunkts Open Graph im Menü Files geöffnet werden.
Da der Dikstra-Algorithmus nicht funktioniert, wenn der Graph negative Entfernungen enthält, sollten in Gred keine negativen Kantenkosten vergeben werden. Wird in Gred ein ungerichteter Graph erstellt, so interpretiert der Dijkstra-Algorithmus jede Kante (u,v) so, als ob ein Pfeil von u nach v und eines von v nach u gleicher Länge existiert.

Nach dem Pressen der Schaltfläche Start werden zwei Eingaben erwartet, nämlich der Startknoten s und der Zielknoten t.
Wird kein Startknoten im Graphenfenster mit der Maus ausgewählt und stattdessen auf Step oder Continue im Algorithmusfenster geklickt, so wird ein zufälliger Knoten als Startknoten festgelegt.
Wird die Wahl des Zielknotens auf diese Weise übersprungen, so wird kein Knoten automatisch als Zielknoten festgelegt, sondern t bleibt undefiniert. Dadurch wird der Dijkstra-Algorithmus dazu veranlasst, die Wege kürzester Länge von s zu allen anderen Knoten zu bestimmen. Wird hingegen ein Zielknoten t vom Benutzer ausgewählt, so bestimmt der Dikstra-Algorithmus nur den kürzesten Weg von s zu diesem Zielknoten t.

Während des Ablaufs des Dijkstra-Algorithmus werden die Knoten in der Menge M rot und die Knoten in der Menge U blau dargestellt.
Der aktuell in M aufgenommene bzw. aktuell aus U entfernte Knoten wird orange und alle anderen Knoten werden grün gefärbt.
Wurde kein Zielknoten t vom Benutzer ausgewählt, so wird jedesmal, wenn ein Knoten in die Menge M aufgenommen wird, der aktuell gefundene kürzeste Weg von s zu diesem Knoten in orange angezeigt. Wurde hingegen ein Zielknoten t ausgezeichnet, so wird nur am Ende des Algorithmus der kürzeste Weg von s zu t in orange dargestellt.

Hält man im Graphenfenster den Mauszeiger über einen markierten Knoten v, so wird in der Statusleiste des Graphenfensters angezeigt, welcher Knoten der aktuelle Vorgänger (predecessor) von v ist und welche Länge (distance) der bisher gefundene kürzeste Weg von s zu v hat. Ist der Knoten v rot gefärbt, so ist das die tatsächliche Länge des kürzesten Weges von s zu v und der angegebene Vorgänger auch der tatsächliche Vorgänger auf diesem Weg. Die Verbindung von einem Vorgänger zu seinem Nachfolger wird in rot angezeigt.
Hält man den Mauszeiger über eine Kante (u,v), so wird in der Statusleiste die Entfernung zwischen u und v angezeigt.
Mit Hilfe dieser Angaben kann sehr leicht der kürzeste Weg von s zu einem Knoten v aus M in umgekehrter Richtung wiedergefunden werden.