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
Dijkstra Behandlung eine negative Kante und geben Sie die richtige Lösung, und einmal falsch geben
Antwort
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.
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)).
Also schauen wir uns die negative Kante an? Wir subtrahieren es nicht, sondern verwenden den absoluten Wert davon? Behandelt Dijkstra so negative Gewichte? –
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
"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
Beispiel wäre eine Grafik, bei der negative Kanten zu vertikal ohne Kanten führen.
- 1. Geben Sie eine Bestätigungsmeldung mit Schlüssel zurück und geben Sie
- 2. Bitte geben Sie die Lösung dazu
- 3. Können Sie einem Bild eine abgewinkelte Kante geben?
- 4. FileUpload.HasFile geben immer falsch
- 5. Android Editext - Geben Sie eine negative Zahl ein numberDecimal | numberSigned
- 6. Währung umrechnen zu schweben (und Klammern geben negative Beträge)
- 7. Geben Sie ein Quiz 2 richtige Antworten
- 8. Warum OpenMP atomare und kritische geben nicht das richtige Ergebnis?
- 9. Wie Push geben und
- 10. Mischen Sie die Zeilen und geben Sie mir die Gesamtzahl
- 11. Gesichtserkennung und geben Filter
- 12. geben Parameter zu funktionieren und laden Sie die Funktion auf die richtige Weise
- 13. httpHead und httpClient geben 503
- 14. Wie geben Sie einem Textfeld eine Standardschriftart und eine Auffüllung?
- 15. Pandas und SQL Alchemy: Geben Sie Spaltendatentypen
- 16. SENDEN FORM mit Mausklick und geben Sie die Taste
- 17. geben und xdebug auf emacs
- 18. geben Sie eine Zeichenfolge in Javascript zurück
- 19. geben zwei Prozent geben Sie mir das die dritte
- 20. PHP Ziel Iframe und geben Sie eine? Katze
- 21. PHP match zwei Arrays und geben Sie eine Farbe
- 22. $ _SERVER ['REMOTE_ADDR'] nicht geben die richtige IP-Adresse
- 23. Optionen Geben Sie die Snapshot-Erstellung und Aufbewahrungsfrist
- 24. Geben Sie Bildbreite und -höhe an, die von PHP-Datei
- 25. NEST2: So geben Sie den Datenbankindexnamen einmal an
- 26. Warum negative Kante in Bellman Ford Algorithmen erlaubt?
- 27. kann jemand eine Lösung von URL geben Umschreiben
- 28. PHP Geben Sie die Rückgabetyp Hints für eine Methode
- 29. Geben Sie Seite, die Sie in
- 30. Geben Sie beliebige Start- und Endzeiten für Cron-Job
Kurze Antwort: Dijkstra-Algorithmus funktioniert nicht garantiert, wenn der Graph negative Gewichte hat. Das bedeutet nicht, dass es immer scheitern wird. – Henry
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? –