最短路徑演算法 Dijkstra演算法 Floyd演算法 簡述
阿新 • • 發佈:2018-12-25
Dijkstra演算法
又稱迪傑斯特拉演算法,是一個經典的最短路徑演算法,主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止,使用了廣度優先搜尋解決賦權有向圖的單源最短路徑問題,演算法最終得到一個最短路徑樹。時間複雜度為O(N^2)
執行動畫:
例項:
抽象步驟:
1.將起點A放入集合中,A點的權值為0,因為A->A=0。
2.與起點A相連的所有點的權值設定為A->點的距離,連線不到的設定為無窮。並且找出其中最小權值的B放入集合中(此時A->B必定為最小距離)。
3.與B點相連的所有點的權值設定為B->點的距離,並且找出其中最小權值的C點放入集合中(此時C的權值必定為其最小距離)。
4.重複步驟3,直至所有點加入集合中。便能得到所有點與A點的最短距離。
Floyd演算法
全稱Floyd-Warshall演算法,又稱佛洛依德演算法,是解決任意兩點間的最短路徑的一種演算法,但是時間複雜度比迪傑斯特拉要高,時間複雜度為O(N^3)嗎,空間複雜度為O(N^2)。
簡單案例:
步驟:
1.將圖轉化成矩陣:
2.選擇V0點作為第一個中間點:
3.進行V0中間點是否能縮短另外兩點間距離的判斷:簡而言之就是非對角線處(紅箭頭處)進行加法判斷,<則替換。
4.對後續點進行步驟2-3相應的操作。
範例:
INF表示無窮大。