Der Bellman-Ford - Algorithmus bestimmt den kürzesten Weg von einer Quelle zu allen anderen Ecken. Anfangs ist der Abstand zwischen s und allen anderen Scheitelpunkten auf ∞ eingestellt . Dann wird der kürzeste Weg von s zu jedem Scheitelpunkt berechnet; das geht weiter für | V | - 1 Iterationen. Meine Fragen sind:
- Warum muss es Iterationen?
- Würde es etwas ausmachen, wenn ich die Kanten in einer anderen Reihenfolge überprüfe?
Angenommen, ich überprüfe zuerst die Kanten 1, 2, 3 und dann bei der zweiten Iteration die Kanten 2, 3, 1.
MIT Prof. Eric sagte, dass die Reihenfolge keine Rolle spielt, aber das verwirrt mich: Würde der Algorithmus einen Knoten, der auf Kante basiert, nicht fälschlicherweise aktualisieren, wenn sein Wert von Kante x 1 abhängt, aber x 1 nach x 2 aktualisiert wird ?
algorithms
shortest-path
user1675999
quelle
quelle
Antworten:
Betrachten Sie den kürzesten Weg von nach t , s , v 1s t . Dieser Pfad besteht aus höchstens | V | - 1 Kanten, da das Wiederholen eines Scheitelpunkts auf einem kürzesten Pfad immer eine schlechte Idee ist (oder zumindest gibt es einen kürzesten Pfad, der keine Scheitelpunkte wiederholt), wenn wir keine negativen Gewichtszyklen haben.s,v1,v2,…,vk,t |V|−1
In Runde 1 wissen wir, dass die Kante gelockert wird, sodass die Entfernungsschätzung für v 1 nach dieser Runde korrekt ist. Beachten Sie, dass wir zu diesem Zeitpunkt keine Ahnung haben, was v 1 ist, aber da wir alle Kanten entspannt haben, müssen wir auch diese entspannt haben. In Runde zwei entspannen wir uns(s,v1) v1 v1 . Wir haben noch keine Ahnung, was v 1 oder v 2 sind, aber wir wissen, dass ihre Entfernungsschätzungen korrekt sind.(v1,v2) v1 v2
Wiederholen Sie dies nach einer Runde wir k + 1 , so haben wir uns entspannt ( v k , t ) , wonach die Entfernungsschätzung für t korrekt ist. Wir haben keine Ahnung, was k ist, bis der gesamte Algorithmus beendet ist, aber wir wissen, dass es irgendwann passieren wird (vorausgesetzt, es gibt keine negativen Gewichtszyklen).k+1 (vk,t) t k
Die entscheidende Beobachtung ist also, dass nach Runde die Entfernungsschätzung des i- ten Knotens des kürzesten Pfades auf den richtigen Wert gesetzt werden muss. Da der Weg höchstens ist | V | - 1 Kanten lang, | V | - 1 Runden reichen aus, um diesen kürzesten Weg zu finden. Wenn ein | V | Die Runde ändert noch etwas, dann passiert etwas Seltsames: Alle Pfade sollten bereits auf ihre endgültigen Werte "festgelegt" sein, also müssen wir die Situation haben, dass ein negativer Gewichtszyklus existiert.i i |V|−1 |V|−1 |V|
quelle
Der längste Weg ohne Zyklen ist
|V|
. Wir beginnen mit einer Quelle, also haben wir bereits einen Pfad der Länge 1, also brauchen wir|V| - 1
mehr Knoten, um den längsten Pfad zu erhalten.Die Reihenfolge spielt keine Rolle, da bei jeder Reihenfolge die Invariante beibehalten wird: Nach
n
Iterationen ist der Wert für jeden Knoten kleiner oder gleich den Kosten des minimalen Kostenpfads vons
zu dem Knoten, der höchstensn
Kanten enthält.Wenn zu Beginn einer Iteration die Kosten bis zu den
n
Knoten korrekt sind, sind sie am Ende der Iteration bis zu denn+1
Knoten korrekt . Eine Neuordnung kann dazu führen, dass einige Knoten niedrigere Kosten verursachen, bevor sie normalerweise aktualisiert werden, aber sie werden schließlich trotzdem aktualisiert.quelle