Gibt es einen ungerichteten GraphG = (V, E), gibt es einen Algorithmus, der die Gesamtzahl der kürzesten Wege zwischen zwei beliebigen Ecken berechnet?v? Ich denke, wir können den Algorithmus von Dijkstra verwenden.Linearer Zeit Graphalgorithmus
0
A
Antwort
0
Ja können Sie Dijkstra verwenden. Erstellen Sie ein Array, das die Gesamtanzahl des kürzesten Pfads zu einem beliebigen Knoten speichert. Nenne es total. Der Anfangswert aller Array-Elemente ist 0, mit Ausnahme von total [s] = 1, wobei s die Quelle ist. In der Dijkstra-Schleife wird beim Aktualisieren des kleinsten Pfads eines Knotens, wenn das Ergebnis der Vergleichung kleiner ist, das gesamte Array dieses Knotens mit der Anzahl der gesamten aktuellen Knoten aktualisiert.
Wenn es gleich ist, addiere das gesamte Array dieses Knotens mit der Anzahl der gesamten aktuellen Knoten.
Pseudocode aus wikipedia mit einigen Änderungen wurde:
function Dijkstra(Graph, source):
create vertex set Q
for each vertex v in Graph: // Initialization
dist[v] ← INFINITY // Unknown distance from source to v
total[v] ← 0 // total number of shortest path
add v to Q // All nodes initially in Q (unvisited nodes)
dist[source] ← 0 // Distance from source to source
total[source] ← 1 // total number of shortest path of source is set to 1
while Q is not empty:
u ← vertex in Q with min dist[u] // Source node will be selected first
remove u from Q
for each neighbor v of u: // where v is still in Q.
alt ← dist[u] + length(u, v)
if alt < dist[v]: // A shorter path to v has been found
dist[v] ← alt
total[v] ← total[u] // update the total array of that node with the number of total array of current node
elseif alt = dist[v]
total[v] ← total[v] + total[u] // add the total array of that node with the number of total array of current node
return dist[], total[]
Verwandte Themen
- 1. Sortierung in linearer Zeit?
- 2. Iteration eines randomisierten Algorithmus in festen Raum und linearer Zeit
- 3. Zufällige topologische Sortierung mit gleichmäßiger Verteilung in nahezu linearer Zeit
- 4. Sortiere erste n Ganzzahlen in linearer Zeit und konstantem Raum
- 5. Berechnung des Modus (häufigstes Element) einer Menge in linearer Zeit?
- 6. Implementieren Reverse in Haskell, die in linearer Zeit läuft
- 7. Timeserie Datenbank linearer Speicher
- 8. Linearer Programmiermaximierungscode in MATLAB
- 9. Linearer Index obere Dreiecksmatrix
- 10. Q-Learning mit linearer Funktionsannäherung
- 11. Linearer Farbverlauf Pinsel Fade WPF
- 12. Python Matplotlib: Zeichnen linearer Ungleichheitsfunktionen
- 13. R zum Lösen linearer Programmierprobleme
- 14. 3dsmax linearer Rotationsregler und Kurveneditor
- 15. Linearer Farbverlauf mit mehreren Hintergründen
- 16. Wie man Bits in einem Bit-Array mit weniger als linearer Zeit partitioniert
- 17. Wie können verschiedene Werte in einer Liste in linearer Zeit gezählt werden?
- 18. Wie kann ich testen, ob ein Baum eine perfekte Übereinstimmung in linearer Zeit hat?
- 19. Clustering eine Milliarde Elemente (oder welche Clustering-Methoden laufen in linearer Zeit?)
- 20. Lösen linearer Gleichungen w. drei Variablen numpy
- 21. Verallgemeinerter linearer gemischter Modellfehler (binäre Antwort)
- 22. iCarousel Linearer Typ beginnt in der Mitte
- 23. Lösen spärlicher linearer Gleichungen in Matlab
- 24. Lösen linearer Gleichungssysteme AX = B mit CUDA
- 25. CSS Linearer Verlauf mit "großen Schritten"
- 26. Implementierung großer linearer Regressionsmodelle mit CUDA
- 27. Z3-Leistung mit nicht-linearer Arithmetik
- 28. Linearer Farbverlauf in Safari funktioniert nicht
- 29. Linearer Verlauf von unten nach oben
- 30. Algorithmus zum Überprüfen, ob Menge A eine Teilmenge von Menge B in schneller als linearer Zeit ist
Dijkstra allein wird nicht die kürzesten Wege geben zählen zwischen * ANY * zwei beliebige Ecken, nur zwischen dem einen Eckpunkt Sie es auf lief und alle anderen. – Wildcard
danke. Es dauerte eine Weile, um zu verstehen, aber – 781850685
Ja, es ist beaucuse Dijkstra ist Single Souce Kürzester Pfad Algorithmus. Aber ich denke, die Frage betrifft die Gesamtzahl der gefundenen kürzesten Wege zwischen zwei beliebigen Ecken u & v, ohne irgendwelche. Wenn es "irgendeinen zwei Eckpunkt" beabsichtigt, kann floyd-warshall-Algorithmus mit einigen Modifikationen verwendet werden. Und es ist nicht linear. –