Der Dijkstra-Algorithmus ist ein Beispiel für einen Single-Source-Shortest- Path- oder SSSP- Algorithmus. Jeder SSSP-Algorithmus berechnet die kürzesten Wegstrecken von einem ausgewählten Quellknoten $s$ zu jedem anderen Knoten im Graphen. Darüber hinaus berechnet es eine kompakte Darstellung aller kürzesten Pfade von $s$ zu jedem anderen Knoten in Form eines Wurzelbaums. Ist im Wikipedia-Code previous[v]das übergeordnete Element von $v$ in diesem Baum. Das Verhalten des Dijkstra-Algorithmus in Graphen mit negativen Kanten hängt von der genauen diskutierten Variante ab. Einige Varianten des Algorithmus, wie die in Wikipedia, laufen immer schnell, berechnen aber bei negativen Kanten die kürzesten Wege nicht korrekt. Andere Varianten, wie die in Jeff Ericksons Vorlesungsnotizen, berechnen kürzeste Pfade immer korrekt (es sei denn, es ist ein negativer Zyklus von der Quelle aus erreichbar), können aber im schlimmsten Fall exponentielle Zeit benötigen, wenn negative Flanken vorhanden sind.
Das ist richtig. Floyd-Warshall ist ein Beispiel für einen All-pairs-shortest-path-Algorithmus , d. h. er berechnet die kürzesten Pfade zwischen jedem Knotenpaar. Ein weiteres Beispiel ist "Führen Sie für jeden Knoten v Dijkstra mit v als Quellknoten aus". Es gibt mehrere andere.
Bellman-Ford ist ein weiteres Beispiel für einen Single-Source- Shortest-Path-Algorithmus wie Dijkstra. Bellman-Ford und Floyd-Warshall sind ähnlich – zum Beispiel sind sie beide dynamische Programmieralgorithmen – aber Floyd-Warshall ist nicht derselbe Algorithmus wie „für jeden Knoten v, führen Sie Bellman-Ford mit v als Quellknoten aus“. Insbesondere läuft Floyd-Warshall in $O(V^3)$- Zeit, während wiederholtes Bellman-Ford in $O(V^2E)$- Zeit läuft ( $O(VE)$- Zeit für jeden Quellknoten). Weitere Informationen finden Sie in Ihrem bevorzugten Lehrbuch für Algorithmen. (Du hast doch ein Lieblingsalgorithmuslehrbuch, nicht wahr?) Die Wikipedia-Seite zum Shortest-Path-Problem beschreibt zwei verschiedene Probleme: SSSP und APSP. Kürzester Pfad aus einer Quelle (SSSP):
Alle Paare kürzester Pfad (APSP):
Daher ist Floyd-Warshall nicht dasselbe wie BFS, obwohl die zugrunde liegende Methodik dieselbe, dynamische Programmierung ist. Vielleicht sollte dies eher ein Kommentar als eine Antwort sein, aber es ist ein Unterschied zwischen diesen Algorithmen, den andere Antworten nicht erwähnen. Die Leute neigen dazu, Floyds Algorithmus Floyd-Warshall zu nennen , aber die Algorithmen von Floyd und Warshall sind nicht gleich. Der Artikel von Warshall stellt fest, dass, wenn Sie den Floyd-Algorithmus auf eine binäre Inzidenzmatrix anwenden, Sie eine Matrixmultiplikation durchführen; Daher kann es tatsächlich so implementiert werden, und wenn Sie zB die Vektormultiplikation in $O(1)$ durchführen können, wird Ihr Algorithmus zu $O(n^2)$.
Others 2020-04-01 11:56:01 views: null Shortest Path Algorithm: kürzester Weg Algorithmus ist in der Graphentheorie untersucht, ein klassischen Algorithmus Problem, Fig das Ziel, den kürzesten Weg zwischen zwei Knoten zu finden (ein Knoten und einem Weg aus). Bestimmen , um den Startpunkt des kürzesten Weges Problem: die bekannten Startpunkt, den kürzesten Weg Problem. Dijkstra-Algorithmus zum Einsatz, (das Single-Source kürzesten Weg) Globales kürzester Weg Problem: Finde den kürzesten Weg , um alle Figuren, geeignet für Floyed-Warshall - Algorithmus, (Multi-Source kürzester Weg) Single-Source kürzester Weg: Bei einem gewichteten gerichteten Graphen G = V, E, wobei jede Kante eine reelle Zahl ist. Ferner ist ein Rückartikulationssatz V bezeichnete Quelle, Quelle zu berechnen , von der Länge des kürzesten Pfades zu allen anderen Ecken. Dies bedeutet , dass jede Länge der rechten Seite und die Straße. Dieses Problem wird in der Regel als Single-Source kürzester Weg Problem bezeichnet; Dijkstra-Algorithmus : DijkstraAlgorithmus gierige Ideedass die aktuelle WahlLösung ist immer die beste Lösung in Frage, der Algorithmus verwendetdas Single-Source kürzesten Weg Problem zu lösen kann negative Gewichte nicht umgehen, kann nur für die rechte Figur positiv sein ; Algorithmus greedyStrategie, von s0 Start, unvisited V wählen[i] von s0 nächsten einem Punkt i, die die kleinsten D [i] sind, und i ist als Zwischenpunkt, das Update durch i, kann den Punkt erreichender kürzeste Abstand, gierig weiterhin die nächstgelegene Punkt unvisited zu finden,nach n gierig, alle Zugangspunkte abgeschlossen ist,der Algorithmus beendet, der kürzeste Abstand zwischen Start- und Endpunkten der Ausgabe;
Floyed Algorithmus: Floyed Algorithmus,auch als Interpolationspunkt Verfahren bekannt, Idee des dynamischen Programmieralgorithmus verwendetden kürzesten Weg zu einer gegebenen Gewichtung zwischen mehreren Quellen Abbildung zu finden, das Multi-SourceVerfahren kürzesten erhalten werden kann, kann negativ hand die rechte Seite des Gehäuses , aber nicht negativ Ring, die Idee, einen dynamischen Programmieralgorithmus verwendet;
Bellman-Ford - Algorithmus: Bellman FordAlgorithmus ist ein Single-Source kürzester Weg Algorithmus; DijkstraAlgorithmus ist es relativ negative Gewichte für Bedingungen behandelt werden können: kein negativer Ring, einfach, aber die Zeit Komplexität ist hoch, kann verwendet werden , um zu bestimmen , ob es Negativschleife , jede Iteration des kürzesten Weg zum Ausgangspunkt jeden Knotensaktualisieren; (n-1 ist zwischen den Kanten 6 Punkten) Wenn die Iteration n-1 mal, wieder gibt es eine Weg Update Iteration, dann gibt es einen negativen Ring; Algorithm denkt: ein beliebigen der kürzesten Balkendiagramm, weder enthalten negative Zyklen, wird es nicht enthalten ist , die rechte Schleife, die bis zu n-1 Rand. Dann wird von dem Quellenpunkt S beginnt, kann der Knoten erreicht werden, wenn der kürzeste ist, der kürzeste Weg einen kürzesten s Wurzelbaum zu bilden. Somit wird in Übereinstimmung mit der Wurzel der Entfernung s von der Ebene, Schicht für Schicht erzeugt die kürzesten jeden Punkt (Ruhebetrieb) erreichen, weshalb der Prozess, ist der kürzeste Weg Baumerzeugungsprozess, erfordert einen Hilfsarray von d [n] und v [n] und der kürzeste Abstand zu dem Verfolgungsaufzeichnungsspur, betrachten aus der Perspektive der Kante, jede Kante jede Iteration zu durchqueren, den Zyklus n-1 mal, wenn der n-ten Zyklus allen d [n] Wert wird nicht aktualisiert, aus der Schleife , und wenn es die n-ten Weg zu aktualisieren, um das Vorhandensein eines negativen Ring angibt; der Bellman-Ford - Algorithmus den längsten Weg zu lösen , kann wie der Ring, solange das ausgewählten maximalen Aktualisierungs Rekursionsrelation zu bestimmen , n und verwendet werden; Algorithmus Umsetzungsprozess:
SPFA Algorithmus: SPFA (Shortest den Pfad FASTERAlgorithmus); Bellman-FordAlgorithmusoben beschrieben, die ZeitKomplexität des Algorithmus ist relativ hoch; Bellman-FordAlgorithmus rekursiv n Zeiten erfordert, wobei jede rekursive notwendigalle Seiten zu scannen; jedoch jeder Schlaff Operationen nicht alle von der lockeren Seite benötigen, müssen nur die aktuellste Seite zu kurzen Ruhepunkt verbunden finden, daher die Verwendung von Warteschlangen,jedem Punkt aus dem Update nicht in einer Warteschlange istWarteschlange eingereiht,jeweils aus einer Warteschlange genommen Vertex-, alle seine benachbarten Knoten Entspannung, Entspannung Erfolgwenn ein Scheitelpunkt, wie beispielsweise der Rückkehrpunkt istin der Warteschlange nicht, wirdWarteschlange eingereiht, solche Operationen wiederholt werden, bis die Warteschlange leer ist,wenn die Anzahl von Malen ein Knoten enqueue mehr als nmal,die Anwesenheit der negativen Zyklen angibt; kann eine CNT [n] -Array zum Zählen verwendet; Algorithmus Umsetzungsprozess:
Zeitkomplexität Analyse:
Bitte beachten Sie den Code zu erreichen: https://github.com/yaowenxu/codes/tree/master/ kürzester Weg Algorithmus Auf dem neuesten Stand, bitte die Quelle, für weitere Informationen wenden Sie sich bitte Aufmerksamkeit cnblogs.com/xuyaowen; Referenzen: Shortest Path Problem vier am kürzesten Weg Algorithmus Dijkstra - Algorithmus Floyd - Algorithmus Unterschied zwischen Prim und Dijkstra - Algorithmus Bellman-Ford - Algorithmus SPFA Algorithmus Origin www.cnblogs.com/xuyaowen/p/shortest-path-algos.html |