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,怎么求最短路徑呢?
看下表: