1. 程式人生 > >多源最短路徑 – Floyd-Warshall Algorithm

多源最短路徑 – Floyd-Warshall Algorithm

min algo ron 介紹 表示 解決 路徑 計算 最短距離

介紹:

  是解決任意兩點間的最短路徑的一種算法,可以正確處理有向圖或負權(但不可存在負權回路)的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。

  Floyd-Warshall算法的時間復雜度是O(N3),空間復雜度O(N2)。

原理:

  Floyd-Warshall算法的原理是動態規劃。

  用fk(i,j)表示從 i 到 j 只以(1...k)集合中的節點為中間節點的最短距離,這樣從fk-1(i,j)推出fk(i,j)就很容易了。

  1° 若最短路徑經過點k,fk(i,j) = fk-1(i,k) + fk-1(k,j)

  2° 若最短路徑不經過點k,fk(i,j) = fk-1

(i,j)

  因此fk(i,j) = min(fk-1(i,j) + fk-1(i,k) + fk-1(k,j))。

  在實際算法中,為了節約空間,可以直接在原來空間上進行叠代,這樣空間可降至二維。

  

多源最短路徑 – Floyd-Warshall Algorithm