圖文解析 | Dijkstra單源最短路徑算法

單源最短路徑問題

給定加權(quán)有向圖G=(V,E,W)议惰,每條邊的權(quán)值w為非負數(shù)意狠,表示兩個頂點間的距離悲酷。

源點s∈V套菜。

求:從s出發(fā)到其他各個頂點的最短路徑。

如上圖所示设易,以1為源點逗柴,計算到其余各個頂點的最短距離(我已用紅線標出)。下面列出了最終解:

源點:1

1->6->2 : short[2] = 5

1->6->2->3 : short[3] = 12

1->6->4 : short[4] = 9

1->6->5 : short[5] = 4

1->6v : short[6] = 3

Dijkstra算法相關(guān)概念

S集合:當從s到x(x ∈V )的最短路徑找到時顿肺,則x ∈S戏溺。當所有頂點都進入S集合時,算法結(jié)束挟冠。

初始:S={s}于购,當S=V時算法結(jié)束。

從s到u相對于S的最短路徑:指從s到u且僅經(jīng)過S中頂點的最短路徑知染。

dist[u]:從s到u相對于S的最短路徑長度

short[u]:從s到u最短路徑的長度(算法最終解)

dist[u] ≥ short[u]

Dijkstra算法采用貪心算法模式肋僧,算法過程就是通過計算dist[u],不斷擴充S集合,同時dist[u]會不斷優(yōu)化改善控淡,直到dist[u] = short[u]嫌吠,并將其放到S中,當所有頂點都放入S集合時掺炭,算法結(jié)束辫诅。

算法設計思想

輸入:加權(quán)有向圖G=(V,E,W)

? ? ? ? ? V={1,2,…,n}, s=1

輸出:從s到每個頂點的最短路徑

1.初始S={1}

2.對于u ∈V-S,計算1到u的相對于S的最短路,長度為dist[u]

3.選擇V-S中dist值最小的那個頂點涧狮,加入S炕矮。

4.繼續(xù)上述過程,直到S=V為止者冤。

實例

輸入:G=(V,E,W)肤视,源點1

????????? V={1,2,3,4,5,6}

初始S集合只有1,計算直接從1能到達的頂點的距離涉枫,其他不能從1號頂點直接到達的頂點都記為無窮大邢滑。此時從dist[u]里找出最短距離的頂點(6號),并將其放進S集合愿汰。

? S={1}

? dist[1] = 0

? dist[2] = 10

? dist[6 ] = 3

? dist[3] = ∞

? dist[4] = ∞

? dist[5] = ∞

當把6號頂點放進S集合后困后,經(jīng)由6號頂點出發(fā)到達的頂點的最短距離可能會被優(yōu)化更新,因為該算法的思想很“貪心”衬廷,誰更短我要誰摇予!比如1->6->2要比1->2距離更短,所以dist[2]被更新為5吗跋,從專業(yè)術(shù)語上講侧戴,這個“更新”過程叫做松弛,其他點同理。然后從dist[u]里找出最短的路徑的那個頂點(5號)救鲤,并放進S集合里。

? S={1,6}

?dist[1] = 0

?dist[6] = 3

? dist[2] = 5

? dist[4] = 9

? dist[5] = 4

? dist[3] = ∞

后面的操作步驟其實就是重復上面的操作秩冈。即當S集合里有個新的頂點后本缠,就可能會更新其他點的最短距離,更新一遍后入问,找出當前最短距離的dist[u]丹锹,并將該頂點放進S集合。后面不重復闡述芬失。

? S={1,6,5}

?dist[1] = 0

?dist[6] = 3

? dist[5] = 4

? dist[2] = 5

? dist[4] = 9

? dist[3] = ∞

? S={1,6,5,2}

?dist[1] = 0

?dist[6] = 3

? dist[5] = 4

?dist[2] = 5

? dist[4] = 9

? dist[3] = 12

? S={1,6,5,2,4}

?dist[1] = 0

?dist[6] = 3

? dist[5] = 4

?dist[2] = 5

?dist[4] = 9

? dist[3] = 12

? S={1,6,5,2,4,3}

?dist[1] = 0

?dist[6] = 3

? dist[5] = 4

?dist[2] = 5

?dist[4] = 9

?dist[3] = 12

當有向圖中的所有頂點都進入了S集合后楣黍,算法結(jié)束,此時的dist[u]的值其實就是最初我們找出的那個最終解short[u]棱烂,所以租漂,算法結(jié)束時,dist[u]=short[u],得到最終解颊糜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哩治,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衬鱼,更是在濱河造成了極大的恐慌业筏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸟赫,死亡現(xiàn)場離奇詭異蒜胖,居然都是意外死亡,警方通過查閱死者的電腦和手機抛蚤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門台谢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人霉颠,你說我怎么就攤上這事对碌。” “怎么了蒿偎?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵朽们,是天一觀的道長。 經(jīng)常有香客問我诉位,道長骑脱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任苍糠,我火速辦了婚禮叁丧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己拥娄,他們只是感情好蚊锹,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稚瘾,像睡著了一般牡昆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摊欠,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天丢烘,我揣著相機與錄音,去河邊找鬼些椒。 笑死播瞳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的免糕。 我是一名探鬼主播赢乓,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼石窑!你這毒婦竟也來了骏全?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尼斧,失蹤者是張志新(化名)和其女友劉穎姜贡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棺棵,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡楼咳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烛恤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片母怜。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缚柏,靈堂內(nèi)的尸體忽然破棺而出苹熏,到底是詐尸還是另有隱情,我是刑警寧澤币喧,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布轨域,位于F島的核電站,受9級特大地震影響杀餐,放射性物質(zhì)發(fā)生泄漏干发。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一史翘、第九天 我趴在偏房一處隱蔽的房頂上張望枉长。 院中可真熱鬧冀续,春花似錦、人聲如沸必峰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼蚁。三九已至桐罕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桂敛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工溅潜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留术唬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓滚澜,卻偏偏與公主長得像粗仓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子设捐,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 參見貪心算法——最短路徑Dijkstra算法參見動態(tài)規(guī)劃 目錄 0.最短路徑問題0.1 最短路徑問題描述?0.1....
    王偵閱讀 4,817評論 1 9
  • Dijkstra算法是給定一個起點也就是原點借浊,然后該原點通過與它臨近的頂點不斷向外擴張,最終得到該原點到其它所有頂...
    lambdacalculus閱讀 4,263評論 1 3
  • 1736年萝招,瑞士數(shù)學家Euler(歐拉)在他的一篇論文中討論了格尼斯七橋問題蚂斤,由此誕生了一個全新的數(shù)學分支——圖論...
    不困于情閱讀 4,404評論 0 9
  • 基本思想 假定一個源點u,頂點集合V被劃分成兩個部分:集合 S 和集合 V-S 槐沼。 初始時S僅包含源點u曙蒸,S中的頂...
    NatureRan閱讀 423評論 0 0
  • 請了一個星期的假,回家岗钩,然后到成都考試纽窟。回到校園兼吓,無比平靜臂港。時間總是過得太快,一個人的日子视搏,兩個人的日子都會一天天...
    歪歪老閱讀 261評論 0 0