Dijkstra(迪傑斯特拉)算法


Dijkstra是什么算法

  Dijkstra是典型最短路徑算法,用於計算一個節點到其他節點的最短路徑。該算法使用的是貪心策略:每次都找出剩余頂點中與源點距離最近的一個頂點。

什么是最短路徑問題

   給定一帶權圖,圖中每條邊的權值是非負的,代表着兩頂點之間的距離。指定圖中的一頂點為源點,找出源點到其它頂點的最短路徑和其長度的問題,即是單源最短路徑問題。

Dijkstra的原理

   (1)初始化時,S只含有源節點;
    (2)從U中選取一個距離v最小的頂點k加入S中(該選定的距離就是v到k的最短路徑長度);
    (3)以k為新考慮的中間點,修改U中各頂點的距離;若從源節點v到頂點u的距離(經過頂點k)比原來距離(不經過頂點k)短,則修改頂點u的距離值,修改后的距離值是頂點k的距離加上k到u的距離;
    (4)重復步驟(2)和(3),直到所有頂點都包含在S中。
    具體圖例與算法執行步驟:(就從A開始,到各節點的最短路徑)。

Dijkstra的應用場景

  在OSI七層網絡模型中第三層是網絡層, 網絡層的典型路由協議就有OSPF(Open Shortest Path First開放式最短路徑優先)協議, 是對鏈路狀態路由協議的一種實現, 而OSPF使用的就是Dijkstra算法

 

Dijkstra問題模型示意圖

  

    

  上圖就是一個帶權的有向圖  我們如果要求從V0到V6,怎么求最短路徑呢?

  看下表:

  

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM