finale Version des Vorlesungsskripts - ZIB

finale Version des Vorlesungsskripts - ZIB finale Version des Vorlesungsskripts - ZIB

23.06.2013 Aufrufe

5.3 Kürzeste Wege neue Algorithmen oder Modifikationen bekannter Algorithmen entdeckt, die aus theoretischer oder praktischer Sicht schneller als die bekannten Verfahren sind oder sonstige Vorzüge haben. Es gibt keinen Algorithmus zur Bestimmung eines kürzesten (s, t)-Weges, der nicht (zumindest implizit) auch alle übrigen kürzesten Wege von s nach v, s = v = t, berechnet. Die Algorithmen für Kürzeste-Wege-Probleme kann man in zwei Kategorien einteilen, und zwar solche, die negative Bogenlängen zulassen, und solche, die nur nichtnegative Bogenlängen behandeln können. Von jedem der beiden Typen stellen wir einen Vertreter vor. Ferner wollen wir noch einen Algorithmus behandeln, der kürzeste Wege zwischen allen Knoten berechnet. Vermutlich haben sich die Menschen schon in grauer Vorzeit mit der Bestimmung kürzester Wege beschäftigt, um z.B. Transporte zu vereinfachen, den Handel zu erleichtern etc. Mathematik – im heutigen Sinne – wurde dabei sicherlich nicht verwendet. Eines der ältesten (uns bekannten) Wegeprobleme der (belletristischen) Literatur kommt aus einer klassischen Quelle: Friedrich Schillers (1759–1805) Schauspiel “Wilhelm Tell”. Dieser konnte bereits 1291 nicht nur gut schießen, sondern auch optimieren. Und nur mit dieser Kombination konnte er die Schweiz befreien! Tell befindet sich nach dem Apfelschuss am Ufer des Vierwaldstätter Sees unweit des Ortes Altdorf. Er muss unbedingt vor dem Reichsvogt Hermann Geßler die Hohle Gasse in Küßnacht erreichen, siehe Abbildung 5.2(b). Schiller berichtet: Tell. Nennt mir den nächsten Weg nach Arth und Küßnacht Fischer. Die offne Straße zieht sich über Steinen Den kürzern Weg und heimlichern Kann Euch mein Knabe über Lowerz führen. Tell(gibtihmdieHand). Gott lohn Euch Eure Guttat. Lebet wohl. Der Fischer löst für Tell in dieser Szene offensichtlich ein graphentheoretisches Optimierungsproblem. In einem Graphen (Wegenetz am Vierwaldstätter See) mit Kantenlängen (Reisezeit) soll der kürzeste Weg zwischen zwei vorgegebenen Punkten (Altdorf und Küßnacht) bestimmt werden. Tell behandelt sogar eine kompliziertere Variante mit einer zusätzlichen Nebenbedingung: Die Summe von „Verhaftungskoeffizienten“ muss unterhalb eines sicheren Grenzwertes bleiben. Man kann dies auch als multikriterielles Optimierungsproblem auffassen (Weglänge und Sicherheit gleichzeitig optimieren). Dies ist ein Aufgabentyp, den wir auch heute noch nicht gut beherrschen. (In der Vorlesung wird mehr dazu berichtet). 5.3.1 Ein Startknoten, nichtnegative Gewichte Das Verfahren, das wir nun darstellen wollen, ist mehrfach entdeckt worden. Es wird allgemein nach Dijkstra (1959) benannt. Wir gehen davon aus, dass ein Digraph D = (V, A) mit “Gewichten” bzw. “Längen” oder “Entfernungen” c(a) ≥ 0 für alle a ∈ A 91

5 Bäume und Wege (a) F. Schiller. (b) Vierwaldstätter See. (c) W. Tell. Abbildung 5.2: Mathematik in der Belletristik: Schillers Schauspiel „Wilhelm Tell“. gegeben ist. Ferner seien ein Startknoten s und möglicherweise ein Endknoten t gegeben. Das Verfahren findet einen kürzesten gerichteten Weg von s zu allen anderen Knoten bzw. einen kürzesten (s, t)-Weg. Der Algorithmus wird häufig als Markierungsmethode bezeichnet. (Warum, wird aus dem Weiteren klar.) Seine Idee kann man wie folgt beschreiben. Wir beginnen im Startknoten s, markieren s und ordnen s die permanente Distanz Null (= Länge des kürzesten Weges von s zu sich selbst) zu. Alle übrigen Knoten v seien unmarkiert, und wir ordnen ihnen als temporäre Distanz (= Länge des kürzesten bisher gefundenen (s, v)-Weges) entweder +∞ oder die Länge des Bogens (s, v), falls dieser in D existiert, zu. Der unmarkierte Knoten mit der kleinsten temporären Distanz ist dann der Knoten, der am nächsten zu s liegt. Nennen wir den Knoten u. Da alle Bogenlängen nicht-negativ sind, ist der Bogen (s, u) der küzeste Weg von s nach u. Wir markieren daher u und erklären die temporäre Distanz von u als permanent, weil wir den (global) kürzesten (s, u)-Weg gefunden haben. Nun bestimmen wir alle Nachfolger v von u und vergleichen die temporäre Distanz von v mit der permanenten Distanz von u plus der Länge des Bogens (u, v). Ist diese Summe kleiner als die bisherige temporäre Distanz, wird sie die neue temporäre Distanz, weil der bisher bekannte Weg von s nach v länger ist als der Weg von s über u nach v. Wir wählen nun wieder eine kleinste der temporären Distanzen, erklären sie als permanent, da der bisher gefundene Weg durch Umwege über andere Knoten nicht verkürzt werden kann, markieren den zugehörigen Knoten und fahren so fort bis entweder alle Knoten oder der gesuchte Endknoten t markiert sind. Etwas formaler kann man diesen Algorithmus wie folgt aufschreiben. (5.17) DIJKSTRA-Algorithmus. Eingabe: Digraph D = (V, A), Gewichte c(a) ≥ 0 für alle a ∈ A, ein Knoten s ∈ V (und möglicherweise ein Knoten t ∈ V \ {s}). Ausgabe: Kürzeste gerichtete Wege von s nach v für alle v ∈ V und ihre Länge (bzw. ein kürzester (s, t)-Weg). 92

5.3 Kürzeste Wege<br />

neue Algorithmen oder Modifikationen bekannter Algorithmen entdeckt, die aus theoretischer<br />

oder praktischer Sicht schneller als die bekannten Verfahren sind oder sonstige<br />

Vorzüge haben.<br />

Es gibt keinen Algorithmus zur Bestimmung eines kürzesten (s, t)-Weges, der nicht<br />

(zumin<strong>des</strong>t implizit) auch alle übrigen kürzesten Wege von s nach v, s = v = t, berechnet.<br />

Die Algorithmen für Kürzeste-Wege-Probleme kann man in zwei Kategorien einteilen,<br />

und zwar solche, die negative Bogenlängen zulassen, und solche, die nur nichtnegative<br />

Bogenlängen behandeln können. Von jedem der beiden Typen stellen wir einen Vertreter<br />

vor. Ferner wollen wir noch einen Algorithmus behandeln, der kürzeste Wege zwischen<br />

allen Knoten berechnet.<br />

Vermutlich haben sich die Menschen schon in grauer Vorzeit mit der Bestimmung kürzester<br />

Wege beschäftigt, um z.B. Transporte zu vereinfachen, den Handel zu erleichtern<br />

etc. Mathematik – im heutigen Sinne – wurde dabei sicherlich nicht verwendet. Eines<br />

der ältesten (uns bekannten) Wegeprobleme der (belletristischen) Literatur kommt aus<br />

einer klassischen Quelle: Friedrich Schillers (1759–1805) Schauspiel “Wilhelm Tell”. Dieser<br />

konnte bereits 1291 nicht nur gut schießen, sondern auch optimieren. Und nur mit<br />

dieser Kombination konnte er die Schweiz befreien! Tell befindet sich nach dem Apfelschuss<br />

am Ufer <strong>des</strong> Vierwaldstätter Sees unweit <strong>des</strong> Ortes Altdorf. Er muss unbedingt<br />

vor dem Reichsvogt Hermann Geßler die Hohle Gasse in Küßnacht erreichen, siehe Abbildung<br />

5.2(b).<br />

Schiller berichtet:<br />

Tell. Nennt mir den nächsten Weg nach Arth und Küßnacht<br />

Fischer. Die offne Straße zieht sich über Steinen<br />

Den kürzern Weg und heimlichern<br />

Kann Euch mein Knabe über Lowerz führen.<br />

Tell(gibtihmdieHand). Gott lohn Euch Eure Guttat. Lebet wohl.<br />

Der Fischer löst für Tell in dieser Szene offensichtlich ein graphentheoretisches Optimierungsproblem.<br />

In einem Graphen (Wegenetz am Vierwaldstätter See) mit Kantenlängen<br />

(Reisezeit) soll der kürzeste Weg zwischen zwei vorgegebenen Punkten (Altdorf und Küßnacht)<br />

bestimmt werden. Tell behandelt sogar eine kompliziertere Variante mit einer zusätzlichen<br />

Nebenbedingung: Die Summe von „Verhaftungskoeffizienten“ muss unterhalb<br />

eines sicheren Grenzwertes bleiben. Man kann dies auch als multikriterielles Optimierungsproblem<br />

auffassen (Weglänge und Sicherheit gleichzeitig optimieren). Dies ist ein<br />

Aufgabentyp, den wir auch heute noch nicht gut beherrschen. (In der Vorlesung wird<br />

mehr dazu berichtet).<br />

5.3.1 Ein Startknoten, nichtnegative Gewichte<br />

Das Verfahren, das wir nun darstellen wollen, ist mehrfach entdeckt worden. Es wird<br />

allgemein nach Dijkstra (1959) benannt. Wir gehen davon aus, dass ein Digraph D =<br />

(V, A) mit “Gewichten” bzw. “Längen” oder “Entfernungen” c(a) ≥ 0 für alle a ∈ A<br />

91

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!