2016-04-22 10 views
1

Ich weiß, dass dies als Duplikat ausgewählt werden kann (seit ich dieses gesehen habe Negative weights using Dijkstra's Algorithm Ich denke, keine der Antworten in SO sind, was ich suche. Ich interessiere mich für die Lösung mit Dijkstra-Algorithmus in Graph, die eine negative Kante hat, aber dass Dijkstra immer noch die richtige Lösung zeigt. Wie würde diese Grafik aussehen? Ich kann mir nicht vorstellen, oder ich bin nicht gut genug, um Dijkstra zu verstehen Negative Kanten überhaupt. Und ich weiß, dass es eine Grafik mit negativer Kante gibt, die mit Dijkstra durchquert werden kann und immer noch den richtigen Weg hat. Bitte nicht, Bellman-Ford oder Johnsons Algorithmus zu verwenden.Dijkstra Behandlung eine negative Kante und geben Sie die richtige Lösung, und einmal falsch geben

+2

Kurze Antwort: Dijkstra-Algorithmus funktioniert nicht garantiert, wenn der Graph negative Gewichte hat. Das bedeutet nicht, dass es immer scheitern wird. – Henry

+0

Ich weiß, aber wie würde Graph mit negativer Kante aussehen, aber Dijkstra funktioniert noch? wenn es darum geht A ---> B (Gewicht 5) -----> C (Gewicht -1) Subtrahiert es normalerweise diese beiden oder markiert es als unendlich? –

Antwort

0

In Tatsache ist, Dijkstras Algorithmus versucht, den Kurzschluss zu finden est-Pfad durch den Vergleich von Pfadkosten, die das Ziel erreichen können, und nimmt den Pfad mit den niedrigsten Kosten. Es spart im Grunde die niedrigsten Kosten vom Startpunkt bis zu jedem einzelnen Knoten, der Sie zum Ziel bringen kann. Wenn der negative Wert diese Reihenfolge nicht beeinflusst (die negative Kante ist ein Teil des kürzesten Pfads), gibt es kein Problem mit dem Pfad (aber Sie erhalten den falsche Pfadkosten). Es gibt auch den Fall, dass die negative Kante Sie nicht zum Ziel führen kann (es ist kein Teil eines Pfades), dann haben Sie kein Problem im Pfad und den Kosten. Vielleicht finden Sie ein drittes Beispiel, die Kante ist Teil eines der Pfade, die Sie zum Ziel führt, aber es ist immer noch nicht Teil des kürzesten Pfades. Hoffe, das half, Viel Glück.

0

Wenn der absolute Wert der negativen Kante kleiner ist als das Gewicht einer anderen Kante im Diagramm, dann funktioniert der Dijkstra-Algorithmus.

Dies stellt sicher, dass wir nicht die Situation haben, dass die Entfernung zu einem Knoten, der aus der Warteschlange herausgefallen ist, später aktualisiert wird. Wie in den typischen Einstellungen (nur positive Gewichte), sobald wir einen Knoten aus der Warteschlange entfernen, sind wir garantiert, dass wir ihn nicht über einen kürzeren Pfad erreichen können.

Hinweis: gilt nicht für gerichtete Graphen, in denen der Quellendpunkt der negativen Flanke gefunden werden kann, nachdem der Zielendpunkt aus der Warteschlange abgerufen wurde (und möglicherweise einen Knoten aktualisieren muss, der gepoppt wurde)).

+0

Also schauen wir uns die negative Kante an? Wir subtrahieren es nicht, sondern verwenden den absoluten Wert davon? Behandelt Dijkstra so negative Gewichte? –

+0

Nein, der negative Wert wird hinzugefügt (wie üblich), d. H. Sein absoluter Wert wird subtrahiert. Wenn die oben erwähnte Bedingung zutrifft, gibt der Algorithmus den korrekten Pfad aus. – qwertyman

+0

"Behandelt Dijkstra so negative Gewichte?" - Der Dijkstra-Algorithmus ist nicht für negative Gewichtungen ausgelegt, daher gibt es keine spezifische Möglichkeit, mit diesen umzugehen. Ich habe gerade versucht, eine Situation zu finden, in der das Ausführen des Algorithmus ohne Änderungen die richtigen Ergebnisse liefert, obwohl irgendwo ein negatives Gewicht vorhanden ist. – qwertyman

0

Beispiel wäre eine Grafik, bei der negative Kanten zu vertikal ohne Kanten führen.

Verwandte Themen