999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

最短路徑算法研究

2016-10-21 20:58:27李魯平
科學與財富 2016年9期

李魯平

摘要:最短路徑問題是圖論研究中的一個經典算法問題,旨在尋找圖(由結點和路徑組成的)中兩結點之間的最短路徑。用于解決最短路徑問題的算法被稱做“最短路徑算法”,有時被簡稱作“路徑算法”。最常用的路徑算法有:Dijkstra算法、A*算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法,本文主要對其中的兩種:Dijkstra和Floyd-Warshall進行研究和分析實現。

關鍵詞:算法;動態規劃;最短路徑;編程開發

0 引言

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

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

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

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

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

用于解決最短路徑問題的算法被稱做“最短路徑算法”,有時被簡稱作“路徑算法”。最常用的路徑算法有:Dijkstra算法、A*算法、Bellman-Ford算法、Floyd-Warshall算法、SPFA算法。Floyd-Warshall算法是求多源、無負權邊的最短路,用矩陣記錄圖,時效性較差,時間復雜度O(V^3)。Dijkstra算法是求單源、無負權的最短路的算法,時效性較好,時間復雜度為O(V*(V+E)),可以用優先隊列進行優化,優化后時間復雜度變為O(v*lgn)。Bellman-Ford算法求單源最短路,可以判斷有無負權回路(若有,則不存在最短路),時效性較好,時間復雜度O(V*E)。SPFA算法是對Bellman-Ford算法的隊列優化,時效性相對好,時間復雜度O(kE)。本文主要研究Dijkstra和Floyd-Warshall算法細節。

1. Dijkstra算法

Dijkstra算法是由荷蘭計算機科學家艾茲格·迪科斯徹(Edsger Wybe Dijkstra)發現的單源最短路徑算法,即在圖中求出給定頂點到其它任一頂點的最短路徑。在弄清楚如何求算單源最短路徑問題之前,必須弄清楚最短路徑的最優子結構性質。該性質描述為:如果P(i,j)={Vi...Vk...Vs...Vj}是從頂點i到j的最短路徑,k和s是這條路徑上的一個中間頂點,那么P(k,s)必定是從k到s的最短路徑。

證明該最優子結構為,假設P(i,j)={Vi...Vk…Vs...Vj}是從頂點i到j的最短路徑,則有P(i,j)=P(i,k)+P(k,s)+P(s,j)。而P(k,s)不是從k到s的最短距離,那么必定存在另一條從k到s的最短路徑P'(k,s),那么P'(i,j)=P(i,k)+P'(k,s)+P(s,j)

由上述性質可知,如果存在一條從i到j的最短路徑(Vi...Vk,Vj),Vk是Vj前面的一頂點。那么(Vi...Vk)也必定是從i到k的最短路徑。為了求出最短路徑,Dijkstra就提出了以最短路徑長度遞增,逐次生成最短路徑的算法。譬如對于源頂點V0,首先選擇其直接相鄰的頂點中長度最短的頂點Vi,那么當前已知可得從V0到達Vj頂點的最短距離dist[j]=min{dist[j],dist[i]+matrix[i][j]}。根據這種思路,假設存在G=,源頂點為V0,U={V0},dist[i]記錄V0到i的最短距離,path[i]記錄從V0到i路徑上的i前面的一個頂點:

1.從V-U中選擇使dist[i]值最小的頂點i,將i加入到U中;

2.更新與i直接相鄰頂點的dist值。(dist[j]=min{dist[j],dist[i]+matrix[i][j]})

3.知道U=V,停止。

2. Floyd-Warshall算法

Floyd-Warshall算法(Floyd-Warshall algorithm)是解決任意兩點間的最短路徑的一種算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用于計算有向圖的傳遞閉包。Floyd-Warshall算法的時間復雜度為O(N3),空間復雜度為O(N2)。

Floyd算法是一個經典的動態規劃算法。用通俗的語言來描述的話,首先我們的目標是尋找從點i到點j的最短路徑。從動態規劃的角度看問題,我們需要為這個目標重新做一個詮釋。

從任意節點i到任意節點j的最短路徑不外乎2種可能,一是直接從i到j,二是從i經過若干個節點k到j。所以,我們假設Dis(i,j)為節點u到節點v的最短路徑的距離,對于每一個節點k,我們檢查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,證明從i到k再到j的路徑比i直接到j的路徑短,我們便設置Dis(i,j) = Dis(i,k) + Dis(k,j),這樣一來,當我們遍歷完所有節點k,Dis(i,j)中記錄的便是i到j的最短路徑的距離。

3. 總結

Dijkstra算法是解決單源最短路徑問題的貪心算法,其基本思想是設置頂點集合S并不斷地做貪心選擇來擴充這個集合。對于具有n個頂點和e條邊的帶權有向圖,如果用帶權鄰接矩陣表示這個圖,那么Dijkstra算法的主循環體需要O(n)時間。這個循環需要執行n-1次,所以完成循環需要O(n2)時間。而Floyd算法的原理是動態規劃,時間復雜度為O(n3),空間復雜度為O(n2),在實際算法中,為了節約空間,可以直接在原來空間上進行迭代,這樣空間可降至二維。為了避免最壞情況的出現,通常使用效率更加穩定的Dijkstra算法,以及它的堆優化版本。

參考文獻

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

[2] 最短路徑,http://baike.baidu.com/view/349189.htm?func=retitle

[3] 李春葆,數據結構教程,清華大學出版社,2005年1月第1版

[3] Dijkstra算法,http://baike.baidu.com/view/7839.htm

主站蜘蛛池模板: 91久久夜色精品| 久久99精品久久久久纯品| 国外欧美一区另类中文字幕| 青青草91视频| 中文字幕永久视频| 在线精品亚洲国产| 一级在线毛片| 2021国产精品自产拍在线观看| 免费福利视频网站| 青青草国产在线视频| 久久久久九九精品影院| www.99在线观看| 亚洲精品午夜无码电影网| 国产激情无码一区二区免费| 夜夜拍夜夜爽| 日本欧美一二三区色视频| av性天堂网| 午夜激情婷婷| 中文成人无码国产亚洲| 色婷婷成人网| 99偷拍视频精品一区二区| 国产精品手机在线观看你懂的| 亚洲免费福利视频| 无码内射中文字幕岛国片| 欧美亚洲香蕉| 国产精品久久国产精麻豆99网站| 97se亚洲| 国产精品毛片一区| 一区二区三区四区在线| 久久精品中文字幕免费| 久久综合色播五月男人的天堂| 亚洲AV免费一区二区三区| 一本久道热中字伊人| 亚洲成人网在线播放| 午夜福利亚洲精品| 丰满人妻被猛烈进入无码| 国产精品无码久久久久AV| 国内a级毛片| 久久精品丝袜高跟鞋| 尤物精品视频一区二区三区| 亚洲第一极品精品无码| 日韩小视频在线播放| 亚洲资源站av无码网址| 欧美a级完整在线观看| 老熟妇喷水一区二区三区| 一级黄色片网| 波多野结衣二区| 欧美一级在线看| 熟女视频91| 日韩a级片视频| 97视频精品全国免费观看 | 伊人福利视频| 亚洲国产中文精品va在线播放 | 日韩大乳视频中文字幕| 老司机午夜精品视频你懂的| 亚洲视频四区| 亚洲欧美精品日韩欧美| 亚洲男人在线天堂| 69国产精品视频免费| 国产精品美女免费视频大全| 韩国福利一区| 一本一本大道香蕉久在线播放| 蜜桃视频一区二区三区| 欧美日韩国产系列在线观看| 男女男免费视频网站国产| 亚洲日韩高清无码| 欧美精品v| 色婷婷在线播放| 国产杨幂丝袜av在线播放| 就去色综合| 欧美中文字幕第一页线路一| 国产成人综合亚洲欧洲色就色| 国产精品无码制服丝袜| 日本国产精品| 亚州AV秘 一区二区三区| 欧美一区二区自偷自拍视频| 色噜噜综合网| 91视频精品| 欧美另类视频一区二区三区| 天天操天天噜| 国产欧美视频综合二区| 中文字幕欧美成人免费|