Dijkstra演算法原理

2021-09-25 11:57:19 字數 1689 閱讀 8318

dijkstra演算法

1.定義概覽

dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。注意該演算法要求圖中不存在負權邊。

問題描述:在無向圖 g=(v,e) 中,假設每條邊 e[i] 的長度為 w[i],找到由頂點 v0 到其餘各點的最短路徑。(單源最短路徑)

2.演算法描述

1)演算法思想:設g=(v,e)是乙個帶權有向圖,把圖中頂點集合v分成兩組,第一組為已求出最短路徑的頂點集合(用s表示,初始時s中只有乙個源點,以後每求得一條最短路徑 , 就將加入到集合s中,直到全部頂點都加入到s中,演算法就結束了),第二組為其餘未確定最短路徑的頂點集合(用u表示),按最短路徑長度的遞增次序依次把第二組的頂點加入s中。在加入的過程中,總保持從源點v到s中各頂點的最短路徑長度不大於從源點v到u中任何頂點的最短路徑長度。此外,每個頂點對應乙個距離,s中的頂點的距離就是從v到此頂點的最短路徑長度,u中的頂點的距離,是從v到此頂點只包括s中的頂點為中間頂點的當前最短路徑長度。

(1) 初始時,s只包含起點s;u包含除s外的其他頂點,且u中頂點的距離為"起點s到該頂點的距離"[例如,u中頂點v的距離為(s,v)的長度,然後s和v不相鄰,則v的距離為∞]。

(2) 從u中選出"距離最短的頂點k",並將頂點k加入到s中;同時,從u中移除頂點k。

(3) 更新u中各個頂點到起點s的距離。之所以更新u中頂點的距離,是由於上一步中確定了k是求出最短路徑的頂點,從而可以利用k來更新其它頂點的距離;例如,(s,v)的距離可能大於(s,k)+(k,v)的距離。

(4) 重複步驟(2)和(3),直到遍歷完所有頂點。

以上圖g4為例,來對迪傑斯特拉進行演算法演示(以第4個頂點d為起點)。

初始狀態:s是已計算出最短路徑的頂點集合,u是未計算除最短路徑的頂點的集合!

第1步:將頂點d加入到s中。

此時,s=, u=。 注:c(3)表示c到起點d的距離是3。

第2步:將頂點c加入到s中。

上一步操作之後,u中頂點c到起點d的距離最短;因此,將c加入到s中,同時更新u中頂點的距離。以頂點f為例,之前f到d的距離為∞;但是將c加入到s之後,f到d的距離為9=(f,c)+(c,d)。

此時,s=, u=。

第3步:將頂點e加入到s中。

上一步操作之後,u中頂點e到起點d的距離最短;因此,將e加入到s中,同時更新u中頂點的距離。還是以頂點f為例,之前f到d的距離為9;但是將e加入到s之後,f到d的距離為6=(f,e)+(e,d)。

此時,s=, u=。

第4步:將頂點f加入到s中。

此時,s=, u=。

第5步:將頂點g加入到s中。

此時,s=, u=。

第6步:將頂點b加入到s中。

此時,s=, u=。

第7步:將頂點a加入到s中。

此時,s=。

此時,起點d到各個頂點的最短距離就計算出來了:a(22) b(13) c(3) d(0) e(4) f(6) g(12)。

深入理解 Dijkstra 演算法實現原理

迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。參考部落格 資料結構 dijkstra演算法最清楚的講解 大概就是這樣乙個有權圖,dijkstra演算法可以計算任意...

最短路徑Dijkstra演算法原理及Matlab實現

圖論的基礎知識不再闡述。最短路徑演算法主要有二 dijkstra演算法 floyd演算法 dijkstra演算法研究的是從初始點到其他每一結點的最短路徑 而floyd演算法研究的是任意兩結點之間的最短路徑 以下圖為例,首先介紹dijstra的原理 紅字為各結點的編號,藍字為各結點之間的距離 首先定義...

演算法 Dijkstra演算法筆記

參考文章 隨記參考邏輯 dijkstra演算法採用的是一種貪心的策略。演算法的基本思想是 通過不斷更新的距離陣列,每次從距離陣列找到離源點最近的乙個且沒有掃瞄過的節點,然後以該頂點為中心進行bfs擴充套件,直到所有節點都掃瞄一遍,最終得到源點到其餘所有點的最短路徑 1 起點固定,若要記錄到達路徑,則...