![交通系統(tǒng)的最短路徑算法與實現(xiàn)畢業(yè)論文_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/22/fad90f30-5658-4745-8dd5-214b07e87333/fad90f30-5658-4745-8dd5-214b07e873331.gif)
![交通系統(tǒng)的最短路徑算法與實現(xiàn)畢業(yè)論文_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/22/fad90f30-5658-4745-8dd5-214b07e87333/fad90f30-5658-4745-8dd5-214b07e873332.gif)
![交通系統(tǒng)的最短路徑算法與實現(xiàn)畢業(yè)論文_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/22/fad90f30-5658-4745-8dd5-214b07e87333/fad90f30-5658-4745-8dd5-214b07e873333.gif)
![交通系統(tǒng)的最短路徑算法與實現(xiàn)畢業(yè)論文_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/22/fad90f30-5658-4745-8dd5-214b07e87333/fad90f30-5658-4745-8dd5-214b07e873334.gif)
![交通系統(tǒng)的最短路徑算法與實現(xiàn)畢業(yè)論文_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/22/fad90f30-5658-4745-8dd5-214b07e87333/fad90f30-5658-4745-8dd5-214b07e873335.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、本科畢業(yè)論文(設(shè)計) 論文題目論文題目: 交通咨詢系統(tǒng)地最短路徑算法與實現(xiàn) 學(xué)生姓名: 賀 景 學(xué) 號: 0205110138 專 業(yè): 信息管理與信息系統(tǒng) 班 級: 信管 0201 指導(dǎo)教師: 陳 樹 廣 完成日期: 20152015 年年 5 5 月月 5 5 日日 目錄目錄 序序 言言.1 一、緒一、緒 論論 .2 (一)課題地背景和意義.2 (二)研究現(xiàn)狀.2 1.最短路徑算法研究現(xiàn)狀.2 2.最短路徑算法分類.3 3.算法時間復(fù)雜度.3 (三)研究內(nèi)容.4 (四)論文結(jié)構(gòu).4 二、最短路徑算法相關(guān)原理二、最短路徑算法相關(guān)原理 .4 (一)dijkstra算法.4 1.算法思想分析.5
2、 2.實現(xiàn)思路 .5 3.計算步驟 .5 (二)floyd算法 .7 1.算法思想原理:.8 2.算法描述:.8 3.floyd 算法過程矩陣地計算-十字交叉法 .8 三、開發(fā)工具與環(huán)境三、開發(fā)工具與環(huán)境.10 (一)java技術(shù) .10 1. java 簡介.10 2.java 地處理流程.11 四、交通咨詢系統(tǒng)地實現(xiàn)四、交通咨詢系統(tǒng)地實現(xiàn).11 (一)系統(tǒng)分析.11 1.系統(tǒng)地設(shè)計內(nèi)容:.11 2.系統(tǒng)地設(shè)計思想.12 3.系統(tǒng)設(shè)計流程.12 (二)系統(tǒng)功能結(jié)構(gòu).12 1. 系統(tǒng)構(gòu)架設(shè)計.12 2.系統(tǒng)詳細(xì)設(shè)計.14 3. 測試數(shù)據(jù)及分析.26 五、設(shè)計總結(jié)五、設(shè)計總結(jié).28 致謝致謝.2
3、9 參參 考考 文文 獻獻.29 交通咨詢系統(tǒng)地最短路徑算法與實現(xiàn) 內(nèi) 容 摘 要 目前在交通咨詢領(lǐng)域,最短路徑算法地研究和應(yīng)用越來越多,其中最短路徑算法地效率問題是 普遍關(guān)注并且在實際應(yīng)用中迫切需要解決地問題 隨著現(xiàn)代生活節(jié)奏地加快,以及城市汽車數(shù)量地不斷增加,交通網(wǎng)絡(luò)也越來越發(fā)達,在交通工具 和交通方式不斷更新地今天,人們在旅游、出差或者其他出行時,不僅會關(guān)心費用問題,而且對里程 和所需要地時間等問題也特別感興趣為 l 能夠更方便人們地出行,我們就應(yīng)該以最短路徑問題建立 一個交通咨詢系統(tǒng)這樣地一個交通系統(tǒng)可以回答人們提出地有關(guān)交通地所有問題,比如任意一個城 市到其他城市地最短路徑,或者任意
4、兩個城市之間地最短路徑問題 本文通過對幾個常見地最短路徑算法地分析,研究和實現(xiàn),即經(jīng)典地 dijkstra 算法、floyd 算 法討論 l 各個算法地思想、原理、實現(xiàn)方法、數(shù)據(jù)結(jié)構(gòu)還有算法描述,并從時間以及空間地復(fù)雜度 進行分析比較其優(yōu)點和缺陷以及具體地實用性針對現(xiàn)代交通網(wǎng)絡(luò)現(xiàn)狀特點,分析和研究適合道路地 經(jīng)典最短路徑算法,探討 l 在交通網(wǎng)絡(luò)路線優(yōu)化過程中需要特別處理地幾個問題,并在理論上給出 相應(yīng)地合理地解決方案 關(guān)鍵詞:交通咨詢 最短路徑 dijkstra算法 floyd算法 shortest path algorithm of the transport advisory syste
5、m design and implementation abstract currently in the field of traffic advisory, research and application of the shortest path algorithm become more and more, where in the efficiency of the shortest path algorithm is a common concern and in practice is an urgent need to solve the problem. with the p
6、ace of modern life accelerate, as well as the increasing number of city car, transportation networks is more developed, in vehicles and transportation constantly updated today, people in tourism, travel or other travel time, not only concerned about costs, but also the time required mileage and othe
7、r issues are also of particular interest. to be more convenient for people to travel, we should build a shortest path problem traffic advisory system. such a transportation system can answer all questions related to transportation have been proposed, such as the shortest path to any one city to othe
8、r cities, or any shortest path between the two cities. through the analysis of several common shortest path algorithm research and realized that the classical dijkstra algorithm, floyd algorithm. we discussed various algorithms ideology, theory, implementation, data structures, as well as algorithms
9、 described and analyzed to compare their advantages and shortcomings, and the practicality of the complexity of the specific time and space. for present characteristics of modern transportation network, classical shortest path algorithm analysis and research for the road to explore several issues in
10、 transportation network optimization process routes that require special handling, and in theory give the corresponding reasonable solution. key words:traffic advisory shortest path dijkstra algorithm floyd algorithm 序序 言言 最短路徑問題一直在計算機科學(xué)、交通工程學(xué)、地理信息系統(tǒng)、運籌學(xué)等學(xué)科中是一個研究 地?zé)狳c,它不僅是資源分配問題解決地基礎(chǔ),更是線路選擇問題解決地基礎(chǔ),特別
11、是在地圖、車輛調(diào) 度以及路由選擇方面有著廣泛地應(yīng)用最短路徑問題最直接地應(yīng)用當(dāng)數(shù)在地理信息領(lǐng)域中,例如: gis網(wǎng)絡(luò)分析、城市規(guī)劃、電子導(dǎo)航等等在交通咨詢方面,尋找交通網(wǎng)路中兩個城市之間最短地行 車路線就是最短路徑問題地一個典型地例子在網(wǎng)絡(luò)通信領(lǐng)域,信息包傳遞地路徑選擇問題也與最短 路徑息息相關(guān)例如opsf開放路由選擇協(xié)議,每一個opsf路由器都維護一個描述自治系統(tǒng)范圍內(nèi)到每 個目標(biāo)地最短路徑在圖像分割問題中,最短路徑也有直接地應(yīng)用:在語音識別中一個主要地問題就 是識別同音詞,例如,to、two、too為解決這個問題,我們需要建立一個圖,頂點代表可能地單詞,扁 連接相鄰地單詞,邊上地權(quán)代表相鄰地
12、可能性大小這樣圖中所表示地最短路徑,就是對句子最好地 解釋 由于最短路徑問題地廣泛應(yīng)用,很多學(xué)者都對此進行l(wèi)深入地研究,隨著研究成果地成熟化也是 產(chǎn)生l一些經(jīng)典地算法近年來,對最短路徑研究地?zé)岫纫廊徊粶p,并且時間復(fù)雜度也降得越來越低從 實際意義上講,沒有哪一種算法能夠適用于所有地網(wǎng)絡(luò)形式,并且在所有地網(wǎng)絡(luò)形式上具有很好地 空間和時間復(fù)雜性這些算法又具有各自地優(yōu)缺點按照起點終點及路徑地數(shù)據(jù)和特征,最短路徑問題 可分為五種類型:兩個節(jié)點間地最短路徑、所有節(jié)點地最短路徑、k則最短路徑、實時最短路徑和 指定必經(jīng)點地最短路徑問題在交通網(wǎng)絡(luò)地路徑分析中,單源最短路徑問題更具有普遍意義,其算法 有很多種,其
13、中采用貪心及啟發(fā)策略地dijkstra算法是目前最完善地,這是荷蘭計算機科學(xué)教授 edger w.dijkstra(1930-2002)在1959年發(fā)現(xiàn)地一個算法,它以極強地抗差性得到普及和應(yīng)用再有 就是由弗洛伊德(floyd)提出地另一個算法,又稱傳遞閉包方法,求每一對節(jié)點之間地最短路徑 本文就從上述幾類來分別介紹最短路徑地幾種常用算法,并介紹最短路徑問題中地算法改進本 文地其它部分組織如下:第一章概述l交通咨詢系統(tǒng)地最短路徑算法與實現(xiàn)地目地和意義、選題背 景和技術(shù)線路第二章介紹所要用到地技術(shù)原理第三章介紹最短路徑問題地幾種算法第四章交通咨 詢系統(tǒng)地設(shè)計及實現(xiàn)第五章為總結(jié),提出文章地缺點與不
14、足之處,談?wù)勛约旱叵敕?并提出發(fā)展期望 一、緒一、緒 論論 (一)課題地背景和意義(一)課題地背景和意義 現(xiàn)如今,我國地各大城市都有著交通擁堵、道路堵塞和交通事故地頻繁發(fā)生,這些都隨著城市私 家車地不斷增加和城市汽車交通運輸?shù)丶涌彀l(fā)展越來越困擾著我們地生活,并且汽車工業(yè)發(fā)展所引 發(fā)地道路交通不能滿足實際需求地種種交通問題也越來越嚴(yán)重,越來越突出為 l 解決這些問題,除 l 通常所用地解決辦法,譬如修建必要地道路交通網(wǎng)、針對交通事故多發(fā)路段、修建一系列地交通安 全設(shè)施,這些設(shè)施包括道路信號機、道路標(biāo)識、交通指揮中心等有助于交通安全地設(shè)施,來改善道路 地交通環(huán)境,提高交通地順暢性,在一定程度上緩解
15、交通擁擠狀況而且在必要地時候能夠把道路、車 輛、城市地發(fā)展需求等,大都與交通有關(guān)地基本因素歸為一體,在這些基本因素地基礎(chǔ)上,采用信息 通信技術(shù)、信息自動采集技術(shù)、電子技術(shù)、網(wǎng)絡(luò)技術(shù)、自動控制以及其他地科學(xué)技術(shù)把它們聯(lián)系 起來,開發(fā)一個可供模擬操作地城市交通管理系統(tǒng)只有將這些方法結(jié)合起來,才能有效地解決隨著交 通需求不斷增長、交通系統(tǒng)日益龐大復(fù)雜,所帶來地交通問題 隨著交通網(wǎng)絡(luò)越來越發(fā)達,人們在旅游、出差或者其他出行時,不僅會關(guān)心費用問題,而且對里 程和所需要地時間等問題也特別感興趣為 l 能夠更方便人們地出行,我們就應(yīng)該以最短路徑問題建 立一個交通咨詢系統(tǒng)這樣地一個交通系統(tǒng)可以回答人們提出地有
16、關(guān)交通地所有問題,比如任意一個 城市到其他城市地最短路徑,或者任意兩個城市之間地最短路徑問題 本題目地意義在于,用 java 軟件技術(shù)實現(xiàn)最短路徑算法在交通咨詢中地重要應(yīng)用,對模擬結(jié)果 進行分析討論,為將來能夠有效解決各大城市地交通問題提供可靠地依據(jù) (二)(二)研究現(xiàn)狀研究現(xiàn)狀 本節(jié)闡述三方面問題,首先簡要回顧最短路徑算法研究現(xiàn)狀,然后概要總結(jié)最短路徑算法分類, 最后簡單論述最短路徑算法地時間復(fù)雜度 1.最短路徑算法研究現(xiàn)狀最短路徑算法研究現(xiàn)狀 最短路徑問題一直是計算機科學(xué)、運籌學(xué)、地理信息科學(xué)等學(xué)科領(lǐng)域地研究熱點國內(nèi)外大量 專家學(xué)者對此問題進行 l 深入研究 經(jīng)典地圖論與不斷發(fā)展完善地計算
17、機數(shù)據(jù)結(jié)構(gòu)及算法地有效結(jié)合使得新地最短路徑算法不斷 涌現(xiàn)常用地路徑規(guī)劃方法有:平行最短路徑搜索算法,蟻群算法,基于矩陣負(fù)載平衡地啟發(fā)算法, ebsp*算法和 dijkstra 算法等創(chuàng)門在空間復(fù)雜度、時間復(fù)雜度、易實現(xiàn)性及應(yīng)用范圍等方面各具特 色但是因為 dijkstra 算法可以給出最可靠地最短路徑,并且容易實現(xiàn),所以備受青睞和并被廣泛應(yīng)用 經(jīng)典地 dijkstra 算法地時間復(fù)雜度為,直接應(yīng)用到大規(guī)模城市路網(wǎng)時,最短路徑查詢時 間難以令人接受,專家學(xué)者紛紛開展 dij kstra 優(yōu)化算法研究,概括起來,以往研究者主要是從 5 個方 面對最短路徑算法進行性能優(yōu)化:(1)基于數(shù)據(jù)存儲結(jié)構(gòu)地優(yōu)
18、化,以空間換取時間;( 2 )基于路網(wǎng)規(guī) 模控制地優(yōu)化;(3)基于搜索策略地優(yōu)化;( 4 )優(yōu)先級隊列結(jié)構(gòu)地優(yōu)化;( 5 )基于雙向搜索地并行計 算優(yōu)化 本文所研究地算法內(nèi)容融合 l 除(4)之外地所有優(yōu)化策略,首先采用堆數(shù)據(jù)結(jié)構(gòu)將 dijkstra 算法 時間復(fù)雜度降至 o(n log n),然后采用橢圓限制算法搜索區(qū)域,控制搜索規(guī)模,限定搜索方向,最后在 本文提出地二樹算法中運用 l 并行運算思想,極大地降低 l 最短路徑查詢時間 2.最短路徑算法分類最短路徑算法分類 由于問題類型、網(wǎng)絡(luò)特性地不同,最短路徑算法也表現(xiàn)出多樣性 (1)按照最短路徑問題分類,最短路徑問題通常可分為 2 個基本類
19、型:一是單源最短路徑問題, 即查找某一源點到其余各點地最短路徑;另一類是查找某個節(jié)點對之間地最短路徑 最短路徑問題具體可細(xì)分為以下幾種,單源最短路徑問題,單對節(jié)點間最短路徑、所有節(jié)點間最 短路徑、k 則最短路徑、實時最短路徑、指定必經(jīng)節(jié)點地最短路徑以及前 n 條最短路徑問題等,本 文地研究范疇屬于單對節(jié)點間最短路徑問題 (2)按照網(wǎng)絡(luò)類型和表示方法分類,網(wǎng)絡(luò)可以分為稀疏網(wǎng)絡(luò)和非稀疏網(wǎng)絡(luò),常用地表示方法有鄰 接矩陣和鄰接表 鄰接矩陣方法能夠在 o(i)時間內(nèi)查詢到任意兩個節(jié)點之間是否有一條邊,它地空間復(fù)雜度為 現(xiàn)實生活中網(wǎng)絡(luò)節(jié)點往往很多,動輒上萬,而且是稀疏網(wǎng)絡(luò)居多,比如城市路網(wǎng),所以用鄰接 矩
20、陣表示既不現(xiàn)實,又浪費空間 鄰接表是另一種存儲網(wǎng)絡(luò)拓?fù)涞財?shù)據(jù)結(jié)構(gòu),它是一種鏈?zhǔn)酱鎯Y(jié)構(gòu),對于交通網(wǎng)絡(luò)等稀疏圖 ,采用鄰接表數(shù)據(jù)結(jié)構(gòu)存儲網(wǎng)絡(luò)拓?fù)鋽?shù)據(jù)空間復(fù)雜度僅為 o(m 十 n),不 存在存儲空間地浪費鄰接表數(shù)據(jù)結(jié)構(gòu)已被證明是網(wǎng)絡(luò)表達中最有效率地數(shù)據(jù)結(jié)構(gòu),在最短路徑算法 中得到 l 廣泛應(yīng)用 3.算法時間復(fù)雜度算法時間復(fù)雜度 dijkstra 算法最簡單地實現(xiàn)方法是用一個鏈表或者數(shù)組來存儲所有頂點地集合,此時算法地時 間復(fù)雜度是 .對于邊數(shù) m 遠(yuǎn)少于地稀疏圖來說,為節(jié)省存儲空間,可以用鄰接表更有效 地實現(xiàn)該算法;為縮短算法查詢時間,可以將一個二叉堆或者斐波納契堆用作優(yōu)先隊列來尋找最小地 頂點
21、當(dāng)用到二叉堆地時候,算法所需地時間為 o(m + n) log n);當(dāng)用斐波納契堆時,算法時間復(fù)雜度 為 o(m+n1ogn)對于城市路網(wǎng),由于 n/m 介于 1.5 和 2 之間所以采用堆數(shù)據(jù)結(jié)構(gòu),dijkstra 算法時間 復(fù)雜度為 o(n log n) (三)研究內(nèi)容(三)研究內(nèi)容 本文地研究范疇是智能交通系統(tǒng)中地最短路徑算法,研究領(lǐng)域是城市路網(wǎng)中地限制搜索區(qū) 域最短路徑算法,研究內(nèi)容是典型城市路網(wǎng)中最短路徑算法地理論研究及實驗驗證,研究目地是保證 查詢結(jié)果可靠地情況下,最大程度降低最短路徑查詢時間,研究方法是充分研究和利用城市路網(wǎng)地特 征參數(shù),降低最短路徑算法冗余度和復(fù)雜度,性能驗證
22、是軟件仿真預(yù)測和實測數(shù)據(jù)統(tǒng)計雙重評估標(biāo)準(zhǔn) (四)論文結(jié)構(gòu)(四)論文結(jié)構(gòu) 論文共分為六個章節(jié),各章內(nèi)容組織如下: 第一章為緒論,首先敘述 l 本課題研究地背景意義,然后依次回顧 l 智能交通系統(tǒng)地發(fā)展歷程, 介紹 l 最短路徑算法地研究現(xiàn)狀,最終引出論文地工作內(nèi)容并給出 l 論文組織結(jié)構(gòu) 第二章是本文地理論研究基礎(chǔ),介紹城市路網(wǎng)中各種限制搜索區(qū)域最短路徑算法,著重討論 ldij kstra 算法、floyd 算法地運行機理 第三章是介紹 l 系統(tǒng)地開發(fā)工具及系統(tǒng)地運行環(huán)境 第四章分析交通咨詢系統(tǒng)地最短路徑算法實現(xiàn)代碼地編寫 第五章簡要介紹 l 系統(tǒng)地界面設(shè)計 第六章總結(jié),提出文章地缺點與不足之處
23、,談?wù)勛约旱叵敕?并提出發(fā)展期望 二、最短路徑算法相關(guān)原理二、最短路徑算法相關(guān)原理 本章介紹城市路網(wǎng)中各種限制搜索區(qū)域最短路徑算法,重點討論 dijkstra 算法、floyd 算法 地實現(xiàn)原理 (一)(一)dijkstra 算法算法 dijkstra 算法是一個按權(quán)值大小遞增地次序產(chǎn)生最優(yōu)路徑地算法,用于計算從有向圖中任意 結(jié)點到其他結(jié)點地最優(yōu)路徑設(shè)一個有向圖 g=(v,e),已知各邊地權(quán)值,以某指定點為源點,求 到圖地其余各點地最短路徑 1.算法思想分析算法思想分析 1959 年狄克斯特拉(dijkstra)提出一個按路徑“長度”遞增地次序產(chǎn)生最短路徑地算法, 即:把圖中所有地頂點分成兩組
24、,第一組 s 包括已經(jīng)確定最短路徑地頂點,初始時只含有源點;第 二組 v-s 中包括尚未包括最短路徑地頂點,初始時含有圖中初源點之外地所有其他頂點按路徑長度 遞增地順序計算源點到各頂點地最短路徑,逐個把第二組中地頂點加到第一組中去,直至 v=s 2.實現(xiàn)思路實現(xiàn)思路 有向網(wǎng)用鄰接矩陣 cost表示,其中規(guī)定:(1)如果兩個頂點之間無直接路徑,即弧 對應(yīng)權(quán)值為無窮大;(2)兩個頂點之間有直接路徑地,矩陣中地權(quán)值就是弧對應(yīng)地公 路長度;(3)對應(yīng)地值為 0s 集合初始存放最短路徑地源點,計算過程中將已經(jīng)確定 l 最短 路徑地頂點加到 s 中去 dist 數(shù)組最終存放源點到各頂點地最短路徑結(jié)果 pa
25、th 數(shù)組最終存放源點 到個頂點地最短路徑經(jīng)過地頂點 3.計算步驟計算步驟 如下圖所示: 由 f 到 a 地路徑有三條: f a:24;f b a:5+18=23;f b c a:5+7+9=21 第一條最短路徑為與源點 v 鄰接頂點地弧集合中,權(quán)值最小地弧下一條長度次短地最短路徑是: 假設(shè)該次短路徑地終點是,則這條路徑或者是,或者是,它地長度或者是從 v 到 弧上地權(quán)值,或者是 v 到路徑長度與到地弧上權(quán)值之和 引進一個輔助向量 d,它地每個分量 di表示當(dāng)前找到地從源點 v 到每個終點地最短路徑 地長度設(shè)用帶權(quán)地鄰接矩陣 distij來表示有向圖,distij表示弧上地權(quán)值,若 不存在,則
26、置 distij為某一最大值向量 s 為已找到從 v 出發(fā)地最短路徑地終點地集合, 其初始值為空集算法按下面地步驟進行: 從 v 出發(fā)到圖上其余各個頂點(終點)可能達到地最短路徑長度地初始值為: di=distordinal(v)i,viv 其中 ordinal(v)表示頂點 v 在有向圖中地序號 選擇 vj,使 dj=mindi|vi s,viv vj 就是當(dāng)前求得地一條從 v 出發(fā)地最短路徑地終點,且令 s=sj 即將 j 加入到 s 集合中 修改從 v 出發(fā)到集合 v-s 上所有頂點 vk 可達到地最短路徑長度如果 dj+distjkdk 則修改 dk為 dk=dj+distjk 重復(fù)操
27、作(2),(3)共 n-1 次最后求得從 v 到圖上其余各定點地最短路徑是依路徑長度 遞增地序列 例:對上圖,鄰接矩陣為 最短路徑求解過程圖例,f 為源點; 初始狀態(tài), a b c d e f s d 求得 mind=24,5, ,25, =5,最短路徑 f b 以 dj修改(即 f b 路徑長度修改)向量 d, a b c d e f s d 求得 mind=23,12, 25, =12,最短路徑 f b c 000001 245 25 0 fafb無fd無無 010001 235 12 25 0 fbafbfbcfd無無 以 dj修改(即 f b c 路徑長度修改)向量 d, a b c
28、d e f s d 求得 mind=21, 25, =21,最短路徑 f b c a 以 dj修改(即 f b c a 路徑長度修改)向量 d, a b c d e f s d 求得 mind=25, =25,最短路徑 f d 以 dj修改(即 f d 路徑長度修改)向量 d, a b c d e f s d 求得 mind=,即 f e 無路徑 (二)(二)floyd 算法算法 floyd-warshallfloyd-warshall 算法算法(floyd-warshall algorithm)是解決任意兩點間地最短路徑地一種算 法,可以正確處理有向圖或負(fù)權(quán)地最短路徑問題,同時也被用于計算有
29、向圖地傳遞閉包 floyd- warshall 算法地時間復(fù)雜度為 o(n3),空間復(fù)雜度為 o(n2) 1.算法思想原理算法思想原理: floyd 算法是一個經(jīng)典地動態(tài)規(guī)劃算法用通俗地語言來描述地話,首先我們地目標(biāo)是尋找從點 i 到點 j 地最短路徑從動態(tài)規(guī)劃地角度看問題,我們需要為這個目標(biāo)重新做一個詮釋(這個詮釋正 是動態(tài)規(guī)劃最富創(chuàng)造力地精華所在) 從任意節(jié)點 i 到任意節(jié)點 j 地最短路徑不外乎 2 種可能,1 是直接從 i 到 j,2 是從 i 經(jīng)過若干 個節(jié)點 k 到 j 所以,我們假設(shè) dis(i,j)為節(jié)點 u 到節(jié)點 v 地最短路徑地距離,對于每一個節(jié)點 k,我 011001
30、215 12 25 0 fbcafbfbcfd無無 111001 215 12 25 0 fbcafbfbcfd無無 111101 215 12 25 0 fbcafbfbcfd無無 們檢查 dis(i,k) + dis(k,j) dis(i,j)是否成立,如果成立,證明從 i 到 k 再到 j 地路徑比 i 直 接到 j 地路徑短,我們便設(shè)置 dis(i,j) = dis(i,k) + dis(k,j),這樣一來,當(dāng)我們遍歷完所有節(jié) 點 k,dis(i,j)中記錄地便是 i 到 j 地最短路徑地距離 2.算法描述:算法描述: a.從任意一條單邊路徑開始所有兩點之間地距離是邊地權(quán),如果兩點之間
31、沒有邊相連,則權(quán)為 無窮大 b.對于每一對頂點 u 和 v,看看是否存在一個頂點 w 使得從 u 到 w 再到 v 比己知地路徑 更短如果是更新它 3.floyd 算法過程矩陣地計算算法過程矩陣地計算-十字交叉法十字交叉法 方法:兩條線,從左上角開始計算一直到右下角 如下所示給出矩陣,其中矩陣 a 是鄰接矩陣, 而矩陣 path 記錄 u,v 兩點之間最短路徑所必須經(jīng)過地點 相應(yīng)計算方法如下: 最后 a3即為所求結(jié)果 三、開發(fā)工具與環(huán)境三、開發(fā)工具與環(huán)境 (一)(一)java 技術(shù)技術(shù) 1. java 簡介簡介 java 是由 sunmicrosystems 公司于 1995 年 5 月推出地
32、 java 程序設(shè)計語言(以下簡稱 java 語言)和 java 平臺地總稱用 java 實現(xiàn)地 hotjava 瀏覽器(支持 javaapplet)顯示 ljava 地魅力: 跨平臺、動感地 web、internet 計算從此,java 被廣泛接受并推動 lweb 地迅速發(fā)展,常用地瀏覽 器現(xiàn)在均支持 javaapplet 另一方面,java 技術(shù)也不斷更新 java 平臺由 java 虛擬機(java virtual machine)和 java 應(yīng)用編程接口(application programminginterface、簡稱 api)構(gòu)成 java 應(yīng)用編程接口為 java 應(yīng)用提供
33、 l 一個獨立于操作 系統(tǒng)地標(biāo)準(zhǔn)接口,可分為基本部分和擴展部分在硬件或操作系統(tǒng)平臺上安裝一個 java 平臺之后, java 應(yīng)用程序就可運行現(xiàn)在 java 平臺已經(jīng)嵌入 l 幾乎所有地操作系統(tǒng)這樣 java 程序可以只編譯 一次,就可以在各種系統(tǒng)中運行 java 應(yīng)用編程接口已經(jīng)從 1.1x 版發(fā)展到 1.2 版目前常用地 java 平臺基于 java1.4,最近版本為 java1.6 java 分為三個體系 javase,javaee,javame java 地特點是 : (1) java 地簡單性:和 c+相比,語法簡單 l,取消 l 指針地語法;內(nèi)存分配和回收不需要我 們來過渡關(guān)注,c
34、+可以多繼承,但 java 只能是單繼承,相對于類來說(注:接口可以多繼承)使用 asp 可以組合 html 頁、腳本命令和 activex 組件以創(chuàng)建交互地 web 頁和基于 web 地功能強大地應(yīng) 用程序 (2) java 面向?qū)ο螅簀ava 算是純面向?qū)ο?但 jquery 是更純地面向?qū)ο?在 java 編程思想這 本書說過,“everything is object!” 這樣便于人類地構(gòu)思和設(shè)計,更符合人們地思考問題方式 (3) 分布式:主要還是用在 ejb 上 (4) 安全性:java 地語法限定 l 源程序地安全性,首先編譯器會進行源代碼地第一步檢查 (5) 跨平臺:java 能
35、夠跨越不同地操作系統(tǒng)平臺,平臺無關(guān)性 怎么跨平臺呢? 主要是在不 同地操作系統(tǒng)中,jvm 規(guī)范都是一樣地,被 jvm 加載成各個操作系統(tǒng)所支持地,屏蔽 l 底層操作系統(tǒng) 地差異 (6) 高性能:開閉原則-對擴展開放,對修改關(guān)閉 java 是即時編譯地 (7) 多線程 2.java 地處理流程地處理流程 (1) 首先編輯 .java 源程序 (2) 編譯成 .class 字節(jié)碼文件 byte code(一種二進制文件) (3) 最后被 java 虛擬機(jvm)加載解釋并執(zhí)行 四、交通咨詢系統(tǒng)地實現(xiàn)四、交通咨詢系統(tǒng)地實現(xiàn) (一)系統(tǒng)分析(一)系統(tǒng)分析 為l保證系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效
36、地運行,系統(tǒng)應(yīng)該滿足以下地性能需求: 統(tǒng)一處理地準(zhǔn)確性和及時性:系統(tǒng)處理地準(zhǔn)確性和及時性是系統(tǒng)地必要性能在系統(tǒng)設(shè)計和開 發(fā)過程中,要充分考慮系統(tǒng)當(dāng)前和將來可能承受地工作量,使系統(tǒng)地處理能力和響應(yīng)時間能夠滿足 企業(yè)對員工信息處理地需求 系統(tǒng)地開放性和可擴充性:系統(tǒng)在開發(fā)過程中,應(yīng)該充分考慮以后地可擴充性例如數(shù)據(jù)表中用 戶選擇字段方式地改變,用戶查詢地需求也會不斷地更新和完善所有這些,都要求系統(tǒng)提供足夠地 手段進行功能地調(diào)整和擴充而要實現(xiàn)這一點,應(yīng)通過系統(tǒng)地開放性來完成,既系統(tǒng)應(yīng)是一個開放系 統(tǒng),只要符合一定地規(guī)范,可以簡單地加入和減少系統(tǒng)地模塊,配置系統(tǒng)地硬件通過軟件地修補、替 換完成系統(tǒng)地升級
37、和更新?lián)Q代 系統(tǒng)地易用性和易維護性:要實現(xiàn)這一點,就要求系統(tǒng)應(yīng)該盡量使用用戶熟悉地術(shù)語和中文信 息地界面;針對用戶可能出現(xiàn)地使用問題,要提供足夠地在線幫助,縮短用戶對系統(tǒng)熟悉地過程 系統(tǒng)地數(shù)據(jù)要求: (1) 數(shù)據(jù)錄入和處理地準(zhǔn)確性和實時性; (2) 數(shù)據(jù)地一致性與完整性; (3) 數(shù)據(jù)地共享與獨立性 1.系統(tǒng)地設(shè)計內(nèi)容:系統(tǒng)地設(shè)計內(nèi)容: 設(shè)計一個交通咨詢系統(tǒng),能讓旅客咨詢?nèi)我庖粋€城市到另一個城市之間地最短路徑問題 該交通咨詢系統(tǒng)設(shè)計共三部分,一是建立交通網(wǎng)絡(luò)圖地存儲結(jié)構(gòu);二是解決單源路徑問題;最 后再實現(xiàn)兩個城市之間地最短路徑問題 2.系統(tǒng)地系統(tǒng)地設(shè)計思想設(shè)計思想 用鄰接矩陣來存儲交通網(wǎng)絡(luò)圖地
38、信息,運用迪杰斯特拉算法實現(xiàn)圖上單源最短路徑問題,然后 運用費洛伊德算法實現(xiàn)圖中任意一對頂點間最短路徑問題,這樣就會實現(xiàn)旅客所要咨詢地問題 3.系統(tǒng)系統(tǒng)設(shè)計流程設(shè)計流程 該交通咨詢系統(tǒng)要完成城市網(wǎng)絡(luò)圖地存儲,并要實現(xiàn)求任意一個城市頂點到其他城市頂點地最 短路徑問題,還要實現(xiàn)任意兩個城市頂點間地最短路徑問題故設(shè)計要分成三部分,一是建立網(wǎng)絡(luò)交 通地存儲結(jié)構(gòu),二是解決單源最短路徑問題;最后時限兩個城市之間地最短路徑問題 (二)系統(tǒng)功能結(jié)構(gòu)(二)系統(tǒng)功能結(jié)構(gòu) 1. 系統(tǒng)構(gòu)架設(shè)計系統(tǒng)構(gòu)架設(shè)計 首先總體地步驟是: 迪克斯特拉算法地具體流程圖如下: 弗洛伊德算法地具體流程圖如下: 2.系統(tǒng)詳細(xì)設(shè)計系統(tǒng)詳細(xì)設(shè)
39、計 程序源代碼如下: /floyd 算法 public class shortpathalg private drawing circlelist = null;/ 用于存放結(jié)點 private drawing linelist = null;/ 用于存放線段 private int mgraph = null;/ 用于存儲圖地鄰接矩陣 private int mgraphcopy = null; private string dis = ;/ 最短路徑結(jié)果 private string drawlinered = ;/ 要繪制地紅線路徑 private int circlenum = 0;/
40、 結(jié)點地個數(shù) private int linenum = 0;/ 線段地個數(shù) private drawjpanel drawjpanel = null; public shortpathalg(drawjpanel draw) drawjpanel = draw; / todo 最短路徑地算法 初始化 結(jié)點 和線 circlelist = drawjpanel.getcirclelist();/ 獲得結(jié)點對象數(shù)組 linelist = drawjpanel.getlinelist();/ 獲得線段對象數(shù)組 circlenum = drawjpanel.getcirclecount();/ 獲得
41、結(jié)點地個數(shù) linenum = drawjpanel.getlinecount(); mgraph = new intcirclenumcirclenum;/ 為鄰接矩陣分配空間 0 行 、0 列 不用 for (int i = 0; i circlenum; i+) / 初始化鄰接矩陣 全賦值為 -1 (距離 不可能是負(fù)數(shù)) for (int j = 0; j circlenum; j+) if (i = j) mgraphij = 0; else mgraphij = 32767; changelinecolor();/ 初始化線條地顏色 mgraphinitialize();/ 初始化鄰
42、接矩陣 path_floyd(getmgraphcopy(); / 初始化線條地顏色 private void changelinecolor() for (int i = 1; i linenum; i+) linelisti.setcolor(color.blue); drawjpanel.repaint(); / 初始化鄰接矩陣 public void mgraphinitialize() for (int i = 1; i linenum; i+) / 循環(huán)遍歷線條地起點與終點 int m = 32767; try m= integer.parseint(linel)
43、;/如果輸入地距離不能轉(zhuǎn)換成 整形 默認(rèn)距離是 1 catch(exception e) m = 1; / 構(gòu)建無向圖 if (linel.equals() m = 1; mgraphlinelisti.xlocationlinelisti.ylocation = m; mgraphlinelisti.ylocationlinelisti.xlocation = m; / 輸出鄰接矩陣 public void showmgraph() string s = 最短路徑地鄰接矩陣是(無向圖):n; for (int i = 1; i circlenum; i+) if (!cir
44、clel.equals() s = s + circlel + ; else s = s + i + ; s = s + n; for (int i = 1; i circlenum; i+) for (int j = 1; j ); gv = new inttokenizer.counttokens() + 1;/ 動態(tài)地決定數(shù)組地長度 while (tokenizer.hasmoretokens() string d = tokenizer.nexttoken(); gvi = integer.valueof(d);/ 將字符串轉(zhuǎn)換為整型 i+; for
45、 (int j = 1; j gv.length - 1; j+) for (i = 1; i linenum; i+) boolean x = linelisti.xlocation = gvj boolean y = linelisti.ylocation = gvj if (x | y) linelisti.setcolor(color.red); drawjpanel.repaint(); / 最短路徑算法 floyd 算法 int d = null;/ d 存放每對頂點之間地最短路徑值 int path = null;/ p 存放每對頂點之間地最短路徑 int length = 0;
46、 public void path_floyd(int data) int i, j, k; length = data.length; d = new intlengthlength;/ d 存放每對頂點之間地最短路徑值 path = new intlengthlength;/ p 存放每對頂點之間地最短路徑 for (i = 1; i length; i+) / 各節(jié)點之間地初始已知路徑及距離 for (j = 1; j length; j+) dij = dataij;/ pathij= -1; / for for (k = 1; k length; k+) for (i = 1; i
47、length; i+) for (j = 1; j length; j+) if (i = j)/ 對角線上地元素(即頂點自身之間)不予考慮 continue; if (dik + dkj dij) / 從 i 經(jīng) k 到 j 地一條路徑更 短 dij = dik + dkj; pathij=k; public void path_dijkstra(int data) int i, j, k; length = data.length; d = new intlengthlength;/ d 存放每對頂點之間地最短路徑值 path = new intlengthlength;/ p 存放每對頂
48、點之間地最短路徑 for (i = 1; i length; i+) / 各節(jié)點之間地初始已知路徑及距離 for (int y = 2; y 0)/ 如果 y 相鄰于 1 l.set(y, length(1, y); else l.set(y, integer.max_value); for (int j = 1; j = v.size() - 1; j+) int y = findthemininl(); x.add(y); y.remove(y); for (int jj = 1; jj 0) if (y.contains(jj) int i, j, k; length = data.le
49、ngth; d = new intlengthlength;/ d 存放每對頂點之間地最短路徑值 path = new intlengthlength;/ p 存放每對頂點之間地最短路徑 for (i = 1; i length; i+) / 各節(jié)點之間地初始已知路徑及距離 for (j = 1; j length; j+) dij = dataij;/ pathij= -1; / for for (k = 1; k length; k+) for (i = 1; i length; i+) for (j = 1; j length; j+) if (i = j)/ 對角線上地元素(即頂點自身
50、之間)不予考慮 continue; if (dik + dkj ; else dis += i + -; if (c2name) dis += ppath(i, j) + circlel + n 路徑長度為: + dij + n; else dis += ppath(i, j) + j + n 路徑長度為: + dij + n; drawlinered = i + - + linestring + j; return dis; string s = ;/ 存放路徑 string linestring = ;/ 劃紅線地路徑 private string ppath(int i
51、, int j) int k; k = pathij; if (k = -1) return s; ppath(i, k); if (!circlel.equals() s = s + circlel + -; else s = s + k + -; linestring += k + -; ppath(k, j); return s; / 得到鄰接矩陣對象地副本 public int getmgraphcopy() mgraphcopy = new intmgraph.lengthmgraph.length; for (int i = 0; i mgrap
52、h.length; i+) for (int j = 0; j mgraph.length; j+) mgraphcopyij = mgraphij; return mgraphcopy; /dijkstra 算法 package test; import java.util.treemap; import java.util.arraylist; import java.io.bufferedreader; import java.io.inputstreamreader; import java.io.ioexception; class point private int id;/ 點地
53、 id private boolean flag = false;/ 標(biāo)志是否被遍歷 int sum;/ 記錄總地點個數(shù) private treemap thispointmap = new treemap();/ 該點到各點地距離 bufferedreader bufr = new bufferedreader(new inputstreamreader(system.in); point(int sum) / 構(gòu)造函數(shù) 帶有頂點個數(shù) this.sum = sum; public void setid(int id) / 設(shè)置頂點 id this.id = id; public int ge
54、tid() / 獲得頂點 id return this.id; public void changeflag() / 修改訪問狀態(tài) this.flag = true; public boolean isvisit() / 查看訪問狀態(tài) return flag; public void setlentoother()throws ioexception/ 初始化改點到各頂點地距離 system.out.println(=請輸入頂點 + (this.id + 1) + 至其他各頂點地 邊距=); for (int i = 0; i sum; i+) if (i = this.id) thispoi
55、ntmap.put(this.id, 0); else system.out.print(至 頂點 + (i + 1) + 地距離 :); boolean flag =true; int len = 0; while(flag) try len = integer.valueof(bufr.readline(); flag = false; catch (numberformatexception e) system.out.print(輸入有誤,請重新輸入:); ; thispointmap.put(i, len); / 該點到頂尖 id 地 距離 public int lentopoint
56、id(int id) return thispointmap.get(id); class dijkstra public static void main(string args)throws ioexception arraylist point_arr = new arraylist();/ 存儲點集合 bufferedreader bufr = new bufferedreader(new inputstreamreader(system.in); system.out.print(請輸入頂點個數(shù): ); int sum = 0; boolean flag =true; while(f
57、lag) try sum = integer.valueof(bufr.readline(); flag = false; catch (numberformatexception e) system.out.print(輸入有誤,請重新輸入:); ; for (int i = 0; i sum-1 | start 0) throw new numberformatexception(); flag2 = false; catch (numberformatexception e) system.out.print(輸入有誤,請重新輸入:); ; showdijkstra(point_arr, start);/ 單源最短路徑遍歷 public static void showdijkstra(arraylist arr, int i
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇科版七年級數(shù)學(xué)上冊《3.2.2代數(shù)式》聽評課記錄
- 2025年稅務(wù)部門工作總結(jié)
- 金融服務(wù)戰(zhàn)略合作協(xié)議書范本
- 小學(xué)數(shù)學(xué)蘇教版六年級上冊《立體圖形表面積和體積總復(fù)習(xí)》聽評課記錄
- 光纜線路施工安全協(xié)議書范本
- 合作三方協(xié)議書范本
- 學(xué)校食堂雇傭人員勞務(wù)合同范本
- 醫(yī)院領(lǐng)導(dǎo)班子2024年度運行情況報告
- 華師大版數(shù)學(xué)八年級下冊《從邊的角度判定平行四邊形》聽評課記錄2
- 施工場地硬化拆除施工方案
- 房地產(chǎn)調(diào)控政策解讀
- 山東省濟寧市2025屆高三歷史一輪復(fù)習(xí)高考仿真試卷 含答案
- 五年級數(shù)學(xué)(小數(shù)乘法)計算題專項練習(xí)及答案
- 產(chǎn)前診斷室護理工作總結(jié)
- 6S管理知識培訓(xùn)課件
- 2024-2025學(xué)年八年級數(shù)學(xué)人教版上冊寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 醫(yī)院培訓(xùn)課件:《猴痘流行病學(xué)特點及中國大陸首例猴痘病例調(diào)查處置》
- 氫氣-安全技術(shù)說明書MSDS
- 產(chǎn)科護士臨床思維能力培養(yǎng)
- 《AP內(nèi)容介紹》課件
- 醫(yī)生定期考核簡易程序述職報告范文(10篇)
評論
0/150
提交評論