Floyd-Warshall berechnet All-Pairs Shortest Paths mit Dynamic Programming.
Die zentrale Rekurrenz lautet:
dist[i][j] =
min(
dist[i][j],
dist[i][k] + dist[k][j]
)Für jeden Zwischenknoten k wird geprüft, ob der Weg i → k → j besser ist.
Initialisierung
dist[i][i] = 0Direkte Kanten erhalten ihr Gewicht, fehlende Verbindungen Infinity.
Negative Gewichte
Negative Kanten sind erlaubt.
Ein negativer Diagonaleintrag:
dist[i][i] < 0zeigt einen negativen Zyklus.
Path Reconstruction
Eine zusätzliche next-Matrix kann den ersten Schritt des jeweils besten Pfads speichern.
Reachability
Mit Boolean-Operationen statt min/+ lässt sich die Transitive Closure berechnen.
Vergleich
Floyd-Warshall:
All Pairs
O(V³)Für große Sparse Graphs sind wiederholtes Dijkstra oder Johnson oft geeigneter.
Anwendungen
- Routing-Matrizen
- Logistik
- Netzwerklatenzen
- Reachability
- Dependency-Analyse
Komplexität
Zeit: O(V³)
Speicher: O(V²)Fazit
Floyd-Warshall ist besonders nützlich, wenn alle Paar-Distanzen benötigt werden und die Knotenzahl moderat ist.