1. 程式人生 > >Dijkstra,Floyd,Bellman-Ford,SPFA演算法的比較

Dijkstra,Floyd,Bellman-Ford,SPFA演算法的比較

都是求最短路徑,但是有一些差別

Dijkstra演算法:是求不含負權圖的單源最短路徑的一種演算法,效率較高

Floyd演算法:相對於Dijkstra演算法,Floyd-Warshall演算法是可以找到所有頂點對之間的最短路徑的長度(多源,每一對頂點之間)。

Bellman-Ford演算法:Dijkstra演算法不能處理含有負權,所以遇到負權邊時候就得用Bellman-Ford演算法來求,Bellman-Ford演算法用於求含負權邊的單源最短路徑,但是處理的圖中不能含有環,缺點是程式碼的時間複雜度高

SPFA演算法:SPFA 演算法是 Bellman-Ford演算法的佇列優化演算法的別稱,通常用於求含負權邊的單源最短路徑,以及判負權環,但是最壞情況下的時間複雜度和Bellman-Ford演算法相同,所以避免最壞情況的發生一般採用效率較高的Dijkstra演算法,SPFA演算法用佇列的完成,如果一個點進入佇列達到n次,則表明圖中存在負環,沒有最短路徑

這是最簡單的區分,更細緻的還得做題才能區分