1. 程式人生 > >最短路徑演算法 Dijkstra演算法 Floyd演算法 簡述

最短路徑演算法 Dijkstra演算法 Floyd演算法 簡述

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表示無窮大。