當前位置:首頁 » 操作系統 » 公交演算法

公交演算法

發布時間: 2022-04-16 02:36:02

① 尋求公交路線查詢的演算法,要求查詢速度要快~~請高手幫幫忙!

http://main.mapbar.com/city

② 求教公交換乘演算法,我不聰明,麻煩說的明白些,謝謝,財富值有回答時在加,避免浪費,謝謝

三個表(最簡單化,不考慮模糊查詢,單行線等其他東西):
1,站點表stop(stop_id,stop_name)
2,路線表line(line_id,line_name)
3,路線站點表(點線路關系表)linestops( line_id, stop_id, seq )此處的seq指某站點在某線路中的順序。
現在分析演算法:
1,直達線路
首先根據兩個站點名獲取兩個站點各自的id,這里定義為id1,id2
然後查詢
select line_id from
(select line_id from linestops where stop_id = id1) A,
(select line_id from linestops where stop_id = id2) B
where A.line_id = B.line_id
即得到可直達的線路列表
2,一次換乘
首先根據兩個站點名獲取兩個站點各自的id,這里定義為id1,id2
然後搜尋兩個站點通過直達方式各自能夠到達的站點集合,最後他們的交集就是我們所需要的換乘站點。
select stop_id from
(
select distinct stop_id from linestops where line_id in
(select line_id from linestops where stop_id = id1)
)A,
(
select distinct stop_id from linestops where line_id in
(select line_id from linestops where stop_id = id2)
)B
where A.stop_id= B.stop_id
得到換乘站(可能有多個或0個)後,剩下的就是顯示能夠到達換乘站的兩邊線路,這通過前面的直達查詢即可。
3,二次換乘
首先根據兩個站點名獲取兩個站點各自的id,這里定義為id1,id2
演算法的中心思想是:站點1能夠通過直達到達的所有站點集合A,站點2能夠通過直達到達的所有站點集合B,A和B之間有直達的線路。
一步一步來:
站點1能夠通過直達到達的所有站點集合A:
select distinct stop_id from linestops where line_id in
(select line_id from linestops where stop_id = id1)
站點2能夠通過直達到達的所有站點集合B:
select distinct stop_id from linestops where line_id in
(select line_id from linestops where stop_id = id2)
而直達的查詢是
select line_id from
1/4頁

(select line_id from linestops where stop_id = id1) C,
(select line_id from linestops where stop_id = id2) D
where C.line_id = D.line_id
我們把=id1和=id2換成 in (select ....)A 和 in (select ...)B
這樣最後我們的查詢是
select line_id from
(select distinct line_id from linestops where stop_id in 【A】) C,
(select distinct line_id from linestops where stop_id in 【B】) D
where C.line_id = D.line_id
其中【A】是
(select distinct stop_id from linestops where line_id in
(select line_id from linestops where stop_id = id1))
其中【B】是
(select distinct stop_id from linestops where line_id in
(select line_id from linestops where stop_id = id2))
這樣子我們找到了作為中間換乘的線路(可能有多條或者0條),對列舉的的每一條假設命名為X線,下一步就是找出可以從站點1到達X任意一個站點的直達線路、和可以從站點2到達X任意一個站點的直達線路即可。
那麼與前面的演算法相似,我們在站點1所有能夠到達的站點中去尋找和線路X相交的站點,然後再去找這兩個點的線路
select stop_id from
(select distinct stop_id

③ 公交2次換乘演算法

呃,我來給你說說。先假設一個情況:你的公交次數卡裡面有10次余額。你拿公交次數卡在8:13第一次刷卡(還剩下8次),那麼在10:13之內的這段時間,你可以在任意一輛接受次數卡的公交車上(除了你在8:13時刷卡的那輛公交車,當然一般不會出現這種情況)再另外刷3次(仍然剩8次)。但是有一個條件:你刷過之後的公交車(注意是公交車,不是公交線路)是不再接受你再次刷次數卡的,這時就要扣你電子錢包裡面的錢,如果沒有電子錢包你就只有投幣。2小時之內你刷卡的次數超過了4次,比如你在8:13刷了一次,在10:13之內,你已經又刷了3次,那麼在10:13之內你仍舊需要轉乘的話就要另外計算次數。比如你在9:55的時候你已經是乘坐了四次,達到了最高次數,那麼轉乘就要重新扣你的次數。9:55時你又轉乘另外一趟公交車刷次數卡,這時就要重新扣你的次數(只剩下6次)。刷卡的原則是次數優先,如果沒有次數就扣電子錢包的錢,如果兩種方式都不能足夠支付你乘車費用,就只能投幣了。轉乘不分普通車和中級車,你在普通車上刷了之後拿到中級車上也是不扣次數,但要計入轉乘次數的記錄。

④ 公共交通線路的搜索是如何實現的簡稱公交換乘演算法

最核心的演算法正是所謂的最短路徑演算法,這個比較簡單
但是 要把演算法用到公交換乘這個裡面去 數據的組織准備 程序效率優化 特殊情形考慮等 是相當地有工作量的

⑤ 公交線路最優演算法

可以理解,如果某條公交車線路是從A地到E地的最短路徑,則其子路也必是最短的。即如果最短路徑為A→B→C→D→E,那麼C→D→E必是C到E的最短路徑。否則用反證法,必可找到一條更短的路線,就與前面矛盾了。最短路徑的上述特性,啟發我們從終點開始,從後向前逐步遞推,求出各站到目的地E的最短子路,最後求出從A站到E站的最短路徑。

⑥ 公交換乘演算法(C++)

這個演算法就是這個公交網站的核心。

⑦ 公交換乘查詢演算法如何計及步行

先搜索一條最優路徑,再從目的地反向查找,將找到的點和條最優路徑對比,
比如:最優路徑倒數點為A,現在查找的為B,判斷B到A的距離,小於我們的要求即為所要求的點,存入(這里可以有多個符合的點)然後再對每個點按上面的那樣尋找,直到找到出發點。。
還有一種是隨便找到一條路線,再以中間點做為換乘點,搜尋附近的點,再判斷搜尋到的點到起始和結束點的距離,進行判斷,。

⑧ 百度地圖或者谷歌地圖中的關於公交轉乘的演算法是如何實現的

A*,根據數據特點做了很多工程上的優化

⑨ 公交線路最少換乘演算法設計遇到的一個問題

考慮成兩趟不同的公交車試試

⑩ 北京市公交車的票價演算法公式

不是這樣的,北京的公交車分為「單一票制」和「分段計價」兩種:

「單一票制」的公交線路,如果沒有卡的話,乘車1元,不管從什麼地方上車、下車。

「分段計價」的公交線路是按照里程計價的,根本不看站的多少,因為站的距離是不一定的。分段計價的線路在所有的站牌上都標注著公里數,就是每個站的下面寫的那些數字,把下車站的數減去上車站的數就是所需的公里數。一般的除了7XX、8XX、9XX的公交車外,都是12公里以內1元,以後每多出5公里加價0.5元。7XX公交車是前10公里1元,以後每增加10公里加價1元。8XX的公交車是:前10公里1元,以後每增加5公里加價1元。9XX的公交車屬於八方達公司的遠郊線路,計價方式比較復雜。。

「分段計價」線路的售票員手裡都有一張站位表,上面寫的不是站數,而是公里數。。

熱點內容
java文件流上傳文件 發布:2024-11-15 05:24:02 瀏覽:147
linux安裝so 發布:2024-11-15 05:22:29 瀏覽:581
九游版冒險王2適合安卓哪個版本 發布:2024-11-15 05:12:33 瀏覽:600
iphonexsmax怎麼連接伺服器 發布:2024-11-15 05:11:46 瀏覽:775
長江存儲校招 發布:2024-11-15 05:11:01 瀏覽:966
oraclesql函數大全 發布:2024-11-15 05:10:00 瀏覽:465
form多文件上傳 發布:2024-11-15 05:09:21 瀏覽:913
雲伺服器搭建網站哪家好 發布:2024-11-15 04:57:34 瀏覽:512
什麼游戲最好玩又不吃配置 發布:2024-11-15 04:56:50 瀏覽:456
擠黑痘解壓 發布:2024-11-15 04:51:13 瀏覽:733