數(shù)據(jù)結(jié)構(gòu)(六) 迪杰斯特拉算法的最短路徑(Swift面向?qū)ο蟀妫?/a>
上篇博客我們?cè)敿?xì)的介紹了兩種經(jīng)典的最小生成樹的算法,本篇博客我們就來詳細(xì)的講一下最短路徑的經(jīng)典算法----迪杰斯特拉算法。首先我們先聊一下什么是最短路徑,這個(gè)還是比較好理解的。比如我要從北京到濟(jì)南,而從北京到濟(jì)南有好多條道路,那么最短的那一條就是北京到濟(jì)南的最短路徑,也是我們今天要求的最短路徑。
因?yàn)樽疃搪窂绞腔谟邢驁D來計(jì)算的,所以我們還是使用上幾篇關(guān)于圖的博客中使用的示例。不過我們今天博客中用到的圖是有向圖,所以我們要講上篇博客的無向圖進(jìn)行改造,改成有向圖,然后在有向圖的基礎(chǔ)上給出最小生成樹的解決方案。本篇博客我們的思路與之前數(shù)據(jù)結(jié)構(gòu)相關(guān)博客的風(fēng)格保持一致,首先我們先給出迪杰斯特拉算法的原理以及詳細(xì)的示意圖,然后根據(jù)這些示意圖給出具體的實(shí)現(xiàn)方案。
一、迪杰斯特拉算法原理解析
在博客的第一部分,我們不談任何與代碼相關(guān)的內(nèi)容,只談迪杰斯特拉算法的原理以及生成最短路徑的具體步驟。下方我們會(huì)給出迪杰斯特拉算法的計(jì)算最短路徑的每一步,并給出每一步具體的說明。廢話少說,進(jìn)入本部分的主題。
1、有向帶權(quán)圖
本篇博客依然采取我們之前用的圖的結(jié)構(gòu)。不過我們本篇博客使用的是有向圖。下方這張圖就是是我們之前使用的無向圖轉(zhuǎn)換過來的,只是給之前的圖的邊添加的具體的方向,其他的并為改動(dòng)。由無向圖轉(zhuǎn)換后的有向圖如下所示,我們將在下方的圖的基礎(chǔ)上計(jì)算出從A到D的最短路徑。
2.迪杰斯特拉算法的具體步驟
下圖就是求上圖中A->D的最短路徑時(shí)使用迪杰斯特拉算法的具體步驟。迪杰斯特拉算法主要核心思想是由起始結(jié)點(diǎn)開始,慢慢的由尾結(jié)點(diǎn)擴(kuò)散。直到擴(kuò)展到尾結(jié)點(diǎn)位置。下方我們將根據(jù)每個(gè)步驟給出具體的介紹:
-
(1)與起始結(jié)點(diǎn)A直接相連的點(diǎn)是B和F, 即A->B的距離為10,A->F的距離為11, 所以我們選擇A->B這個(gè)路徑。
-
(2)選擇B結(jié)點(diǎn)后,我們開始探測(cè)與B相連的結(jié)點(diǎn),即A->B->G路徑長(zhǎng)度為26
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26