圖論中四個最短路徑演算法

來源:互聯網
上載者:User

標籤:ase   開始   最小   最短路徑   min   利用   大於   路徑   a演算法   

(一)單源最短路徑演算法

1. Dijksta演算法

要求圖G(V,E)的所有邊的權重都為非負值。

運用了貪心演算法的思想,但是較好地的是,其找到的解一定是最優解。

 演算法主要思想:

  用數組d[]表示開始節點A到其餘節點的路徑長度;用w(u,v)表示節點u到v的權值,若兩節點無直接路徑,則該值為無窮大;矩陣Q儲存每次迴圈每個節點的dv]值,總結點數為n。

  初始時,開始節點到自身距離d[A]初值為0,到其餘節點d[V]初值為無窮大。

  迴圈:對每個節點進行判斷,若d[v]大於d[u]+w(u,v),則令d[v]=d[u]+w(u,v),即進行一次鬆弛操作。一次操作後,選取本次迴圈中d[i]最小的節點i為下次迴圈的節點u,這也是貪心的思想所在,即每次迴圈選取路徑最短的節點為中間節點。

  上述進行迴圈n-1次。

  則d[v]為從初始節點到節點v的最短路徑。

時間複雜度:O(V.Texteact-min+E.Tdecrease-key)。

2. Bellman-Ford演算法

圖G(V,E)中的邊的權重可以為負值。

思想:

 在上述Dijkstra演算法的思想上,增加了一個判斷是否有負環路的操作,如果有負環路,則表示該圖中不存在從初始節點到目標節點的最短路徑。

判斷是否存在負環路:鬆弛操作進行完後,判斷若d[v]>d[u]+w(u,v),則表示有負環路,報告錯誤。

時間複雜度:O(VE)。

(二)全源最短路徑演算法

3. Floyd-Warshall演算法

要求圖G(V,E)的所有邊的權重都為非負值。

思想:

  用Ck(i,j)表示第k次迴圈後的矩陣C(i,j),k從1到n。

該演算法的架構為三層迴圈,最外層為迴圈次數,即一共產生n個矩陣C(,),裡面兩層迴圈即n=k時對C(,)進行遍曆填寫。

C(i,j)表的填寫為鬆弛操作:若C(i,j)>C(i,k)+C(k,j),則C(i,j)=C(i,k)+C(k,j)。

時間複雜度:O(n^3)。

4. Johnson演算法

圖G(V,E)中的邊的權重可以為負值。

思想:

  對權重重新賦值,使其新的權重不小於0,且保持各該圖的最小路徑關係,再利用Bellman-ford演算法進行計算。

時間複雜度:O(VE+V^2LGV)。

 

匆忙寫的,難免有錯誤的地方,要是發現了歡迎指正。

圖論中四個最短路徑演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.