Dijkstra最優路徑的演算法

2021-08-01 06:55:34 字數 2200 閱讀 5818

dijkstra最優路徑的演算法:

1 最短路徑演算法

在日常生活中,我們如果需要常常往返a地區和b地區之間,我們最希望知道的可能是從a地區到b地區間的眾多路徑中,那一條路徑的路途最短。最短路徑問題是圖論研究中的乙個經典演算法問題,旨在尋找圖(由結點和路徑組成的)中兩結點之間的最短路徑。演算法具體的形式包括:

(1)確定起點的最短路徑問題:即已知起始結點,求最短路徑的問題。

(2)確定終點的最短路徑問題:與確定起點的問題相反,該問題是已知終結結點,求最短路徑的問題。在無向圖中該問題與確定起點的問題完全等同,在有向圖中該問題等同於把所有路徑方向反轉的確定起點的問題。

(3)確定起點終點的最短路徑問題:即已知起點和終點,求兩結點之間的最短路徑。

(4)全域性最短路徑問題:求圖中所有的最短路徑。

用於解決最短路徑問題的演算法被稱做「最短路徑演算法」, 有時被簡稱作「路徑演算法」。最常用的路徑演算法有:dijkstra演算法、a*演算法、bellman-ford演算法、floyd-warshall演算法、johnson演算法。

本文主要研究dijkstra演算法的單源演算法。

2 dijkstra演算法

dijkstra's algorithm, conceived by dutch 

computer scientist

edsger dijkstra

in 1956 and published in1959,

[1][2]

is a graph searchalgorithm

that solves the single-source 

shortest pathproblem

for a

graph

with nonnegative 

edge

pathcosts, producing a 

shortest path tree

.this algorithm is often used in

routing

and as asubroutine in other graph algorithms.

2.1 dijkstra演算法

dijkstra演算法是典型最短路演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。

dijkstra演算法是很有代表性的最短路演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。 

2.2 dijkstra演算法思想

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

2.3 dijkstra演算法具體步驟  

(1)初始時,s只包含源點,即s=,v的距離為0。u包含除v外的其他頂點,u中頂點u距離為邊上的權(若v與u有邊)或)(若u不是v的出邊鄰接點)。

(2)從u中選取乙個距離v最小的頂點k,把k,加入s中(該選定的距離就是v到k的最短路徑長度)。

(3)以k為新考慮的中間點,修改u中各頂點的距離;若從源點v到頂點u(u u)的距離(經過頂點k)比原來距離(不經過頂點k)短,則修改頂點u的距離值,修改後的距離值的頂點k的距離加上邊上的權。

(4)重複步驟(2)和(3)直到所有頂點都包含在s中。

2.4 dijkstra演算法舉例說明

如下圖,設a為源點,求a到其他各頂點(b、c、d、e、f)的最短路徑。線上所標註為相鄰線段之間的距離,即權值。(注:此圖為隨意所畫,其相鄰頂點間的距離與圖中的目視長度不能一一對等)

圖一:dijkstra無向圖

參考文獻

[1] 黃國瑜、葉乃菁,資料結構,清華大學出版社,2023年8月第1版

[2] 最短路徑,

[3] 李春葆,資料結構教程,清華大學出版社,2023年1月第1版

[3] dijkstra演算法,

Dijkstra演算法 尋找最優路徑

一般情況下,dijkstra演算法是解決單源最短路徑問題的,也就是在已知終點時,求出圖中的每個點到終點的最短距離,但是一般只記錄距離值,不會記錄具體的路徑,即怎麼走能從起點通過最短路徑來到達終點 思路就是引入乙個path表,其中path x 表示,如果從x節點要到達終點的最短路徑,在x節點下一步應該...

最優路徑之 Dijkstra

求在乙個加權有向無環圖中,從起點到終點的最短路徑 圖中有四個節點,分別為 start,a,b,end 各個節點間的路徑長度如下 start a 6 start b 2 a end 1 b a 3 b end 5 終點 無 答案 最短路徑為 start b a end 6 usr bin env py...

Dijastra最優路徑演算法

關於dijastra演算法,零零散散地研究了差不多兩天了,基本上弄懂了它的思路和寫程式的思路。演算法思路不是很難 沒理解時還是覺得有點晦澀 的實現過程,需要反覆推敲和琢磨。目前先寫個初級版本 現在暫時只理解到這個程度 演算法的思想和方法,各路牛人已經寫過很多,小菜鳥就不贅述了,對我自己而言,我覺得下...