下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
多源最短路徑Floyd算法的分析與實現(xiàn)周玉清張紅梅重慶市地理信息中心400020Email:zhouyuqing214@126.com摘要:本文比較詳細的介紹了多源最短路徑的Floyd算法設(shè)計思想,并使用C語言實現(xiàn)了該算法,并對該算法的時間復(fù)雜度進行了討論,在此基礎(chǔ)上使用RationalQuantify測試了該算法的實際時間復(fù)雜度。關(guān)鍵詞:最短路徑Floyd算法算法分析GISAbstract:Thispaperintroducesthethinkingoftheshortestpath’sFloydingreatdetails,andimplementsthealgorithmwithClanguage.Also,thearticleanalysesthetimecomplexityofthealgorithmandtestsitwithRationalQuantify.Keywords:shortestpath;algorithmFloyd;algorithmanalysis;GIS引言網(wǎng)絡(luò)分析作為GIS最主要的功能之一,在電子導(dǎo)航、交通旅游、城市規(guī)劃以及電力、通訊等各種管網(wǎng)、管線的布局設(shè)計中發(fā)揮了重要的作用,而網(wǎng)絡(luò)分析中最基本、最關(guān)鍵的問題是最短路徑問題。最短路徑不僅僅指一般地理意義上的距離最短,還可以引申到其它的度量,如時間、費用、線路容量等等。相應(yīng)地,最短路徑問題就成為最快路徑問題、最低費用問題等。對于單源點的最短路徑問題,一般采用經(jīng)典的最短路徑算法Dijkstra算法,只是不同系統(tǒng)對Dijkstra算法采用了不同的實現(xiàn)方法。本文對多源路徑算法Floyd算法做了詳細的介紹,并編程實現(xiàn)了該算法,最后測試了該算法的性能。多源路徑Floyd算法思路本算法采用鄰接矩陣存儲圖的網(wǎng)絡(luò)信息,在此用鄰接矩陣cost[MAX][MAX]來表示帶權(quán)有向圖,若從Vi到Vj有弧,則cost[i][j]值為弧(Vi,Vj)上的權(quán)值,否則為皿從圖的鄰接矩陣cost出發(fā),求圖中從Vi到Vj的最短路徑長度和結(jié)點序列。節(jié)點圖圖l的cost矩陣如圖2所示。1J圖1:節(jié)點圖03cost=圖1:節(jié)點圖03cost=231013132433343335334313圖2:矩陣圖如果從Vi到Vj.存在弧,則從Vi到Vj.存在一條長度為cost「i][j]的路徑,該路徑不一定是最短路徑,尚需進行n次試探。第一次判別(V,V,)和(V,V),即判別(V,V,i11ji1V)是否存在,若存在,則比較(V,▼)和0,V,,V)路徑,取其中最短路徑,作為從jiji1jVi到Vj的中間頂點不多于一個的最短路徑;第二次增加頂點V2,若(Vi......V2)和(V2......Vj)是當前找到的中間結(jié)點個數(shù)不多于一個的最短路徑,則0墮,….....,V2,..?:?.,Vj)就有可能是從Vi到Vj的最短路徑。將它和已經(jīng)得到從Vi到Vj的中間頂點不多于一個的最短路徑相比較',從中選出長度較短者作為從Vi到Vj的中間頂點不多于二個的最短路徑;第三次再增加一個頂點V3,繼續(xù)進行試探,以此類推。經(jīng)過n次比較后,最后求得的一定是從Vi到Vj最短路徑「按此算法,可以同時求得各對頂點之間的最短路徑。'由上所述,隨著試探時內(nèi)的不斷變化,遞推地產(chǎn)生一個nxn方陣序A。,A1,A2,......,Ak......,*記錄著試探的過程?!?2"其中:Ao[i][j]=cost[i][j]Ak[i][j]==min{Ak1[i][j],Ak1[i][k]+Ak1[k][j]}1<k<n在計算公式中,Ao[i][j]為初始值,A1[i][j]是從Vi到Vj的中間頂點個數(shù)不多于一個的最短路徑;Ak[i][j]是從Vi到Vj中間頂點個數(shù)不多于K個的最短路徑;An[i][j]是從Vi到Vj中間頂點個數(shù)不多于n-1個的最短路徑;即An[i][j]就是從Vi到Vj的最短路徑。在程序中,用數(shù)組C[i][j]來存放從頂點Vi到Vj的中間點。1J算法分兩部分:第一部分計算出最短路徑矩陣An和中間點矩陣C;第二部分根據(jù)矩陣An和C求出給定起點到終點的最短路徑值和最短路徑所經(jīng)過的中間點。計算最短路徑矩陣和中間點矩陣將網(wǎng)絡(luò)圖用表示各頂點間距離dij的相鄰矩陣D=(dij)表達。若圖中不存在弧(i,j),則置dij=M(M為足夠大的正數(shù))。dij按下述情況確定:若自頂點i必須經(jīng)其他點才能回到i,則置dij=M;否則,置dij=0。構(gòu)造中間點矩陣C=(cij),對所有i,j置cij=i,以表示此時自頂點i至j的路徑均經(jīng)中間點i。至k=0。第2本步思路是依次以頂點k(k=1,2,n)作為中間點,在當前頂點i至j的距離dij和自頂點i經(jīng)中間點k至j的距離dik+dkj中,取其小者作為新的最短路長,并將實現(xiàn)此最短路徑的中間點k記與Cij0由于取最小,故若dik及dkj=M,則dik+dkj必步比dij小,故不做。又當i=k或j=k時,即經(jīng)本點時,也不做。1J"置k=k+1。對所有d^M的i手k和dkj手M的j手k置dij=min{dij,dik+dkj}。若dik+dkj<dij,則置cij=k。第3步:若某dij<0,則存在長為負值的回路,這不可能,故算法中止。若k<n轉(zhuǎn)回2步。算法以k=n,dij>0終止,此時的dij為所有i至所有j的最短路長。使用3個嵌套循環(huán)語句即可實現(xiàn)迭代過程:(使用一維數(shù)組代替二維數(shù)組)求出最短路徑建立一個含有n個的一維向量p,以存放最短路。K=1,p[k]=i,p[k+1]=j;構(gòu)造最短路。將x=cij,若x點且x手j,說明x是i和j間的中間點,則將p之自n-1至k+1的諸元素依次后移一個標號,并將p[k+1]=x,j=x,轉(zhuǎn)回2步,否則k=k+1。若p[k+1]手0,意為最短路尚未構(gòu)成,則i=p[k],j=p[k+1],轉(zhuǎn)回2步。否則轉(zhuǎn)3步。終止。此時p之前k個元素就是最短路上的標號。流程圖如下圖:算法復(fù)雜度分析考察算法第一部分:即求出最短路徑矩陣d和得到中間點矩陣c算法時間復(fù)雜度:T(n)=O(n3),由于采用鄰接矩陣表示,所以空間復(fù)雜度為:S(n)=O(n2)考慮算法的第二部分:最好的情況是p中的元素不需要移動,即i到j(luò)的最短路徑就是由i直接到j(luò),此時復(fù)雜度為1,最壞的情況是最短路徑經(jīng)過所有的頂點,所以p中的元素移動1+2+3+……n-1次,所以平均時間復(fù)雜度為:T(n)=O(n2)空間復(fù)雜度為:S(n)=O(n)所以總的來考慮,該算法的時間復(fù)雜度為O(n3),空間復(fù)雜度為O(n2)由于該算法第一次將所有點對之間的最短路徑的值和最短路徑的路徑信息全部計算出來了,所以第二次在相同網(wǎng)絡(luò)圖形下進行最短路徑分析時只需用到算法的第二部分,此時的算法復(fù)雜度為O(n2),所以該算法比較適合需要重復(fù)計算點對之間的最短路徑。重復(fù)使用的次數(shù)越多,總的時間復(fù)雜度越趨近O(n2)。錯誤!圖3:流程圖算法實現(xiàn)與性能測試本算法測試采用RationalQuantify工具進行,Quantify是一款面向VB、VC、JAVA的函數(shù)級性能分析工具,它可以自動的檢測出影響程序運行的性能瓶頸,同時提供圖形化的分析表格,幫助程序員進行性能的分析與優(yōu)化。在性能優(yōu)化的過程中,一些程序員往往是憑著經(jīng)驗去分析自己所寫的代碼,找到性能瓶頸,這樣會面臨兩個問題:程序員所找到的性能瓶頸的代碼很可能是自己認為不合理的算法,但在優(yōu)化的過程中大家都知道性能的優(yōu)化往往不是優(yōu)化算法不合理的,而是主要優(yōu)化占用時間最長的函數(shù);在一個大型的項目中,如何在成千上萬的代碼中找到性能瓶頸是一個最頭痛的問題,如果自己不了解所在的項目那就更無法下手。Quantify可以高效的發(fā)現(xiàn)問題,且不是通過代碼的檢查來發(fā)現(xiàn)問題則是關(guān)鍵,Quantify有以下幾個優(yōu)勢:對當前的開發(fā)影響特別的少,還集成在一些通用的開發(fā)工具中,大大的增強了使用的容易度,比如VisualStudio;性能的顯示以圖形的方式進行,可以很直接的了解到性能所在的瓶頸;無需源代碼就可以對大多數(shù)的系統(tǒng)進行性能的分析;同時顯示的函數(shù)的信息非常的詳細,包含了調(diào)用的次數(shù),時間等,還有相關(guān)的調(diào)用關(guān)系;在測試功能的同時,對性能進行分析,不需要額外的輔助代碼;本文中為了便于測試,采用隨機矩陣進行測試,隨機矩陣的對角線元素為零,其他元素是0至1000之間的隨機數(shù)。本例分別取了N={8,16,32,64,128,256,512}測試算法所耗CPU時間。圖4:RationalQuantify函數(shù)分析界面測試結(jié)果如下表:問題規(guī)模(頂點數(shù))函數(shù)Opti耗時(毫秒)函數(shù)f耗時(毫秒)總耗時(毫秒)理論耗時(毫秒)80.00990.00030.01020.0102160.08560.00020.08560.0816320.71990.00100.72090.6528645.87600.00115.87715.222412847.33330.004547.337841.7792256379.53060.0063379.5306334.23365123036.89890.06813036.97702673.8688表1:測試結(jié)果表5.結(jié)論由測試結(jié)果圖表可知,隨著問題規(guī)模的增大,時間耗費以13的增長,實際測試結(jié)果的增長速度略大于理論增長速度,但這種測試方式是理想的;但是有一定的局限性,在設(shè)計測試矩陣的時候是考慮了所有點對之間都有邊直接相連,而在實際情況中這是很少出現(xiàn)的,尤其
是問題規(guī)模比較大的時候是不可能出現(xiàn)這種情況的,所以在實際情況中考慮到一個頂點的鄰接邊數(shù)目比較小,時間增長速度應(yīng)該比理論值小。對于函數(shù)f在測試過程中耗時總是小的原因,這是因為點和其他任何頂點都相連,所以一般只要經(jīng)過幾個頂點即可達到終點,所以p中需要移動元素的次數(shù)比較小,需要判圖5:時間復(fù)雜度圖圖5:時間復(fù)雜度圖參考文獻:1:王凌段江濤王保保,GIS中最短路徑的算法研究與仿真計算機仿真,[2]2005(1):117-120.:3]許志海魏峰遠,交通網(wǎng)絡(luò)中最短路徑算法分析與探討,河南理工大學學報,2005(1),74-78.司連法王文靜,快速Dijkstra最短路徑優(yōu)化算法的實現(xiàn),測繪通報,2005(8):15-18.:4]宋麗敏,最短路徑的編程實現(xiàn),華北航天工業(yè)學院學報,2001(11
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鹽城2025年江蘇鹽城射陽縣教育局下屬事業(yè)單位招聘教師5人筆試歷年參考題庫附帶答案詳解
- 溫州2025年浙江溫州瑞安市人民檢察院聘用制書記員招錄筆試歷年參考題庫附帶答案詳解
- 江西2025年江西生物科技職業(yè)學院招聘人事代理人員筆試歷年參考題庫附帶答案詳解
- 恩施2025年湖北恩施州巴東縣教育局所屬部分城區(qū)學校選調(diào)教師22人筆試歷年參考題庫附帶答案詳解
- 平頂山2025年河南汝州市紀委監(jiān)委機關(guān)所屬事業(yè)單位選調(diào)11人筆試歷年參考題庫附帶答案詳解
- 安康2025年陜西省安康市縣直及縣城周邊學校(單位)選聘教師44人筆試歷年參考題庫附帶答案詳解
- 嘉興浙江嘉興職業(yè)技術(shù)學院海鹽學院招聘編制外工作人員筆試歷年參考題庫附帶答案詳解
- 臺州浙江臺州玉環(huán)市文化館招聘編外工作人員筆試歷年參考題庫附帶答案詳解
- 職業(yè)人群健康促進的精準化方案
- 耗材管理績效與科室考核聯(lián)動
- 安全評價通則aq8001-2023
- 2025年上半年湖北省煙草專賣局(公司)招聘【30人】(業(yè)務(wù)操作類)易考易錯模擬試題(共500題)試卷后附參考答案
- 人工智能在信息通信領(lǐng)域的應(yīng)用研究
- 騰訊云人工智能工程師認證考試題(附答案)
- 物流行業(yè)倉儲雙控體系管理制度
- 浙江省工貿(mào)企業(yè)電氣隱患排查技術(shù)服務(wù)規(guī)范
- 中建10t龍門吊安拆安全專項施工方案
- 操作工技能等級評級方案
- 購房委托書范文
- 新生兒先天性腎上腺皮質(zhì)增生癥
- (完整版)四宮格數(shù)獨題目204道(可直接打印)及空表(一年級數(shù)獨題練習)
評論
0/150
提交評論