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

XML數據公交信息查詢優化算法及實現

2015-07-22 00:14:51劉明珠丁亦楠鄭云非
哈爾濱理工大學學報 2015年2期

劉明珠++丁亦楠++鄭云非

摘要:針對公交線路規劃的問題,必須提供一個準確快捷的公交查詢系統以滿足人們日常出行的需求.研究了基于XML數據的公交查詢系統,該系統采用B/S模式,利用ASP.NET框架和C#語言,實現了公交運行查詢功能.在換乘查詢算法部分及在Dijkstra算法的基礎上,分析了路徑尋優的原理,實現了路徑距離計算的具體方法.并通過減少臨時節點排序及數量的方式,改進了Dijk-stra算法,最終減少了尋找路徑的時間并簡化了路徑計算,最后,以天津市公交數據為例.用改進的Dijkstra算法對公交查詢系統進行了分析驗證,結果表明,利用改進的Dijkstra算法可以實現高效的公交信息查詢,節約查詢時間,節省內存資源.

關鍵詞:公交查詢;Dijkstra算法;XML數據;路徑尋優;最短路徑

DOI: 10.15938/j.jhust.2015.02.016

中圖分類號:TP319

文獻標志碼:A

文章編號:1007-2683(2015)02-0085-06

0 引 言

隨著現代城市規模發展,城市的公交線路也越來越復雜,準確又方便地查閱公交線路,已經成為與人們生活息息相關的問題.傳統的公交查詢系統大多使用Sybase SQL Server、Oracle等傳統數據庫系統保存公交信息數據,并運用(structured querylanguage SQL)語言實現對這些數據庫的操作.SQL語法簡單,語言語句可嵌套,這使它具有極大的靈活性,但是,對于管理者的要求較高.目前,利用XML文件的結構化標記數據和可移植性的特點,構建公交查詢系統后臺數據結構,以減輕系統管理者負擔,并提供準確、快捷的公交線路查詢系統成為智能公交系統的研究熱點之一.XML即可擴展標記語言,它使用表示起始和結束標簽的語法來描述和交換獨立于應用程序的結構化數據.使用XML存儲數據使得管理者不再需要使用傳統的soL語言來更新管理數據,減輕了管理人員的負擔.本文首先對Dijkstra算法進行改進,并在Visual Studio開發環境下,利用ASP.net框架,采用B/S模式,構建XML數據,并將線路與站點數據相結合,同時融合拐點數據,使得線路查詢算法更加簡單,為公交查詢系統的數據管理提供了一種新方法.

1 系統需求描述

1.1 性能需求

一個好的公交查詢系統應具有準確性,快速性,易擴展性和易使用性.它保證系統輸出結果的準確性,避免出現重復或者錯誤的查詢結果給用戶造成誤導,并且在數據的導入、導出和查詢過程中數據的處理時間響應上不超過ls.系統利用的XML數據非常便于管理者在后臺隨時進行更新和修改,即可直接打開XML數據文件進行手動修改.同時查詢者無需進行登錄即可進行公交查詢,系統配備合理的人機交互界面,方便用戶查詢和使用,節約了用戶查詢時間.

1.2 功能需求

公交查詢系統功能需求結構如圖1所示.

1)線路查詢:包含了線路的上、下行信息,并涵蓋了線路經過的所有站點信息.當用戶輸入的信息不明確或不詳細時,系統自動進行模糊查詢,為用戶匹配需要的線路信息.

2)站點查詢:此功能在用戶進行查詢時,將包含此站點的所有公交線路反饋給用戶,若用戶輸入的站名不明確時,系統自動進行模糊查詢,為用戶反饋合適的公交線路信息.

3)乘車路線查詢:本系統以較少換乘次數作為設計依據設計了零換乘站點查詢和一次換乘查詢.首先輸出零換乘的查詢結果,其次輸出一次換乘的查詢結果,給查詢者帶來方便.

2 Dijkstra換乘算法描述及其優化

Dijkstra算法以廣度優先算法為基礎,主要解決從固定的單個點源,經過若干點后,到其他固定頂點的最短路徑問題.本系統換乘查詢部分采用了改進的Dijkstra換乘算法.

2. 1 基于傳統Dijkstra算法的換乘查詢算法

在本文設計的公交查詢系統中,一次換乘查詢采用了Dijkstra算法,具體過程如下:

Stepl.設起點為站點A,設終點為站點C,其它的站點為站點B.設從站點A到站點B的集合為U(A,B)距離為AA,若站點B為中轉站,則設AA=0;若站點B非中轉站則AA=∞.

Step2.計算出AA的具體數值,對AA的值排序,并從AA最小值開始暫定其為AA的值,暫定該AA下的站點B為最佳中轉站點.

Step3.設從站點B到站點C的集合為U(B,C),距離為AB,則從站點A到站點C的距離為AC=AA+AB.對AC的值和對應的換乘數據進行保存.

Step4.重復step2和step3直到所有AA為最大值.

Step5.對所有已保存的AC的值進行排序找到從站點A到站點C的最短距離和相對應的換乘數據,

該過程基于傳統Dijkstra算法可以實現一次換乘查詢,提供準確結果.但由于遍歷計算節點較多,并產生大量中問數據,導致其效率不高,算法時問得不到優化.

2.2傳統Dijkstra換乘算法優化原理

基于傳統的Dijkstra換乘算法,對于一個公交查詢系統,一般來說有以下兩種常規優化方案:

1)傳統優化方案一:該Dijkstra算法優化方案根據在查詢中轉站時,對中轉站設置一定的權值來實現,這樣做的好處是可以對換乘的次數進行排序,優先選擇少換乘的路線,之后再對換乘路線的距離進行計算并排序.但是,這種方案當換乘次數增多時,會產生大量的查詢線路無用結果,并且由于權值的加入,最終導致運算結點的增加,使得運算次數增多,不具備一定的實用性,雖然針對于傳統的Dijk-stra算法進行工一定優化,但并不是最佳優化方案.

2)傳統優化方案二:該Dijkstra算法優化方案在計算起點A到中轉站B的距離AA時只計算站點B為中轉站的距離,然后直接計算站點B到站點C的距離AB,最后依據AC=AA+AB直接計算全程線路的距離AC的值后再對AC排序.這樣做減少了中途排序的過程,節約了大量計算機內存.但是這種方案在查找同一組線路下的中轉站會出現中轉站重復的情況,進而增加中途結點,沒有實現算法完全優化.

2.3 本系統Dijkstra換乘算法優化原理

在本系統中,傳統的Dijkstra算法在計算過程中產生大量的0元素,∞元素以及中間數據,這樣做會占用較多計算資源,且該算法的時間復雜度為O(n2),當數據量過大時,中途的結點數據量會占據大量的計算機內存單元,算法運行的時間將會不可接受,因此,需要對傳統的Dijkstra換乘算法進行優化,使之減少資源占用,減輕計算復雜度,優化實現的具體過程為:

Stcpl.設起點為站點A,終點為站點C.找出包含A的線路L(A)和包含站點C的線路/(C).

Step2.分別求出線路/(A)和線路L(C)的所有站點,找出L(A)與L(C)線路站點中包含的相同站點,即為中轉站點1.若查找出的相同站點包含重復的,L(A)與L(C)線路,則停止重復查找,直接查詢下一條線路的相同站點.

Step3.直接計算站點B到站點C的距離AB.

Stcp4.依據AC=AA+△B直接計算AC的值,再對AC排序.

這樣做與傳統的Dijkstra算法過程相比,避免了巾途積累大量的結點數據,并減少了中途排序的過程,當算法在運算過程中產生n個結點數時,優化算法的時間復雜度減少為0(n)這樣節約了大量計算機內存并節省了大量運算時間,并提高了查詢速度.

2.4 Dijkstra換乘算法優化實驗驗證結果

為了驗證本系統的Dijkstra換乘算法優化的搜索效率,正確性以及優化效率,本文對傳統Dijkstra算法,傳統Dijkstra算法優化方案一,優化方案二和本系統的Dijkstra優化算法分別進行了實驗,并進行了算法的對比驗證.

在進行實驗驗證時,首先選取10組不同的起點和終點數據,然后使用這10組數據進行線路查詢,在換乘線路查找過程中,分別記錄使用這4種算法方案所產生的平均節點數及算法的搜索效率,并驗證輸出結果的正確性,最終分析說明優化Dijkstra換乘算法相比其它3種算法方案的提升效率,各項比較結果如表1所示,

從表l中可以看出,使用優化后的Dijkstra換乘算法過程中產生的節點數明顯減少,并且優化提升明顯,相比其他3種算法方案,本系統使用的Dijk-stra優化換乘算法很好的節省了內存占用單元和查詢時間,滿足了用戶需求.

3 基于XML數據的公交信息查詢優化算法的實現

3.1 XML數據模塊設計說明及程序實現

XML數據設計直接影響系統的性能以及管理員的維護.XML數據將線路與站點數據相結合,并且融合了線路拐點數據,所謂拐點即公交按其線路行走時需要拐彎的點,融合拐點數據后,使站點距離計算更加精確,本系統的XMI。數據模塊如下所示:

由于XML文檔可以被表示為標簽在節點上的樹,則通過圖2表示出該XML文檔的數據模式圖.通過這些數據可以查詢乘車線路,并計算出兩站點之間的距離,并且非常便于管理員在后臺隨時更新和維護該XML數據.

在此模塊中:

主要包含3個元素,分別為:station元素、line元素及lines元素.

1)標簽中存儲了該條線路的所有站點和拐點.其中,元素name表示站點名稱,若該點為拐點,則name為空,元素longitude表示該站點(拐點)的經度,元素latitude表示該站點(拐點)的緯度,用C#進行數據傳人時,首先建立XS-pot類,類中定義了用來存儲線路名稱的字符串變量和用來存儲坐標的坐標變量,用XSpot類定一個spot自定義類型,將每條線路的站點數據分別存人其中.

2)標簽中存儲了一條線路和該線路所包含的所有站點和拐點,其中,元素name表示線路名稱.

3)標簽中存儲著所有線路,在用C#進行數據傳人時,首先建立XLine類,類中定義了用來存儲線路名稱的字符串變量和用來存儲線路包含的站名名稱及站點信息的XSpot變量.用XSpot類定義一個spots自定義類型,將spot內的每條線路站點信息全部存人其中,整合為全部線路的全部站點名稱,并用XLine類定義一個line自定義類型,將標簽內的數據全部存人line中,其中包含每條線路名稱name和對應的站點及站點坐標spots.

3.2計算站點距離的數學模型描述

1)當用戶從站點A1到站點AM時,中途要經過m-2個站點及拐點,分別設站點為A2,A3,…,Am-2,A—1·

2)設站點A1的經度為x1,,站點A1緯度為y1;站點A2經度為X2,站點A2緯度為Y2,則站點A1與站點A2的經度差為

X1= X2 -Xl,

(1)

它們的緯度差為

3)由于地面上經度或緯度相差1度以內對應的地表弧長大約是S =lllkm,且站點與站點間的距離都小于1經度或l緯度.因此,站點A.與站點A2之間的距離為

同理,站點A2與站點A3之間的距離為

站點Am一,與站點Am之間的距離為

4)由此可知,從站點A1到站點Am,即用戶的乘車所經過的距離為

3.3基于優化Dijkstra乘車查詢算法的實現

本系統乘車查詢實現分為零換乘與一次換乘兩部分.

3. 3.1零換乘

首先應用C#的List容器類以及System.Xml控件將XML后臺數據中的線路信息與站點拐點的信息傳人程序中,并使用List類構建linesl和lines2兩個新容器,設用戶查詢的起點站為stationl,終點站為station2,查找包含stationl的所有線路并將其存入容器linesl中,同時將包含station2的所有線路存入lines2中.之后,使用List類構建line容器來保存共同包含stationl與station2的線路,此線路即為用戶零換乘所需要的乘車線路,之后利用站點距離數學模型及C#語言實現可計算出stationl到sta-tion2的距離.在C#中,求兩個List的交集,可以通過調用List類中的Intersect方法”line=linesl.Inter-sect(lines2). ToList()”;利用C#容器類的這個特點可簡單有效的求出用戶所需的乘車線路,再通過索引找出stationl及station2分別在line中的位置,即可求出用戶乘坐該線路所要經過的站點及距離.最后,利用C#語言提供的接口IComparer,建立內部繼承類,并利用該接口中提供的CompareTo()函數對類中的成員進行比較,通過這個方法,對line中的線路路徑長度進行比較后排序并將結果存人新容器lines中,可得出零換乘從路徑最短到路徑最長的查詢結果(流程圖如圖3左邊所示).

3.3.2 一次換乘

用C#語言實現時,首先設起點站為stationl,終點站為station2,利用Find()函數,找出所有包含stationl的線路liriel中以及所有包含station2的線路line2,并用索引標記出stationl,station2分別在lineI和line2中的位置.其次,利用判斷中轉站的方法”Linel.spots[i].GetName()==line2.spots[j].GetName()”來找出line1和line2中的共同站點,即換乘站點,其中,spots代表線路的站點,GetName()用來獲取站點中的線路名稱.由于在相同linel與line2問一般會有多個換乘站點,因此,先通過對sta-tionl與station2到換乘站點距離分別進行計算,求出station1到station2的距離,再取出stationl到sta-Lion2存相同line1與line2下的最短距離,最終只保留相同linel,line2下stationl到station2的最短路徑結果,并保存在List容器path中,再進行下一組line1,line2的判斷.最終,將保留的換乘查詢結果排序并利用lines.Add(path);全部保存在List容器liries中,即為一次換乘的乘車線路(流程如圖3右邊所示).

3.4查詢結果的輸出

本系統通過使用天津市公交信息數據,最終實現了線路查詢、站點查詢、乘車線路查詢三大功能.

1)線路查詢:在該方面本系統以“101路”線路作為實驗數據,在進行線路查詢時,輸入“101”,通過模糊查詢來找到101路公交的上下行線路所有信息,查詢結果如圖4所示.

2)站點查詢:在站點查詢的方面,本系統以“天津站”為例,查詢了經過天津火車站的所有公交線路,查詢結果如圖5所示.

3)乘車路線查詢:在乘車路線查詢結果輸出方面,系統根據人們出行時的乘車心理,首先選擇了輸出零換乘的查詢結果,當零換乘的查詢結果較少或沒有零換乘的乘車路線時,系統將繼續自動進行一次換乘查詢,并將結果輸出.同時,為了保證系統結果簡明扼要,在進行線路查找時,添加了限制語句,令輸出的乘車線路結果保持在5條以內,既當容器lines中存儲的線路個數達到5條時,系統自動停止線路查詢,這樣既減少了搜索乘車線路所花費的時間,又給用戶提供了快捷方便的結果.系統以起點為“天津站”,終點為“天津西站”作為實驗依據,對該系統進行了實驗驗證,乘車線路的查詢結果如圖6所示.

4 結 語

本系統首先通過使用XML數據,進而實現對傳統Dijkstra換乘算法的改進,并將結果與傳統Dijk-stra換乘算法和傳統Dijkstra換乘優化方案進行比較,驗證了本系統算法的優越性,最終構建了一個對于用戶方便使用,對于管理員方便管理的簡便實用的公交查詢系統,實驗表明了利用改進的Dijkstra算法可以實現高效的公交信息查詢,節約了查詢時間,節省了內存資源.該系統對于傳統Dijkstra換乘算法的優化為公交查詢系統提供了一種新的解決思路.

主站蜘蛛池模板: 欧美第九页| 中国毛片网| 一区二区三区国产精品视频| 国产一区亚洲一区| 国产精品久久久精品三级| 欧美成一级| 亚洲成网站| 在线观看国产小视频| 欧美成人综合在线| 亚洲无码高清视频在线观看 | 国产精品成人免费视频99| 拍国产真实乱人偷精品| 四虎国产在线观看| 国产va在线| 黄色成年视频| 亚洲AV无码乱码在线观看代蜜桃| 99久视频| 国产成人久久777777| 亚洲高清中文字幕| 国产精品林美惠子在线观看| 日韩精品视频久久| 日日拍夜夜嗷嗷叫国产| 67194在线午夜亚洲| 香蕉伊思人视频| 亚洲一区二区三区香蕉| 国产97视频在线| 国内丰满少妇猛烈精品播| 91精品情国产情侣高潮对白蜜| 国产电话自拍伊人| 国产成人乱无码视频| 国产91精品久久| 国内丰满少妇猛烈精品播| 在线a网站| 国产精品分类视频分类一区| 美女国产在线| 欧美不卡视频一区发布| 国产精品片在线观看手机版| 国产xxxxx免费视频| 国产成人8x视频一区二区| 精品国产成人高清在线| 国产九九精品视频| 中文字幕无线码一区| 色偷偷综合网| 狠狠色丁香婷婷综合| 国产精品精品视频| 欧美第一页在线| 在线观看免费AV网| 无码中文字幕精品推荐| 中文字幕 91| 国产91无码福利在线| 黄色免费在线网址| 成人精品亚洲| 久久久亚洲色| 欧美成人综合视频| 亚洲精品欧美日本中文字幕| 国产中文一区a级毛片视频| 天堂亚洲网| 国产精品手机在线播放| 国产簧片免费在线播放| 人妻无码AⅤ中文字| 久久久久久高潮白浆| 国产特级毛片aaaaaaa高清| 无码精品福利一区二区三区| 再看日本中文字幕在线观看| 91在线播放国产| 小说区 亚洲 自拍 另类| 欧美激情视频一区二区三区免费| 人妻无码中文字幕一区二区三区| 国产主播一区二区三区| AV天堂资源福利在线观看| 九色视频线上播放| 精品免费在线视频| 无码'专区第一页| 久久国产精品夜色| 日本欧美一二三区色视频| 国产精品yjizz视频网一二区| 免费一级毛片在线播放傲雪网| 美女亚洲一区| 在线观看免费AV网| 亚洲欧美极品| 亚洲综合专区| 国产成人综合日韩精品无码首页|