本發(fā)明涉及信息處理,尤其涉及一種路網(wǎng)中最短路徑批量查詢方法。
背景技術(shù):
1、查詢路網(wǎng)最短路徑距離通常采用經(jīng)典的dijkstra算法,其將城市路網(wǎng)的交叉路口作為圖中的點(diǎn),將道路長(zhǎng)度或者行駛時(shí)間等作為圖中邊的權(quán)值,通過(guò)寬度優(yōu)先搜索的策略獲得圖中任意兩點(diǎn)間的最短路徑距離。
2、然而由于該算法在查詢最短路徑距離時(shí)需要遍歷圖中的所有點(diǎn)和邊,查詢效率很低,無(wú)法滿足現(xiàn)實(shí)使用需求,且現(xiàn)有的最短路徑查詢方法需要對(duì)查詢進(jìn)行復(fù)雜的分解過(guò)程,同時(shí)也需要構(gòu)造大量的緩存來(lái)匹配應(yīng)答,大大降低了查詢過(guò)程的計(jì)算效率并增加了存儲(chǔ)代價(jià)。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明提供一種路網(wǎng)中最短路徑批量查詢方法,以克服上述技術(shù)問(wèn)題。
2、為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是:
3、一種路網(wǎng)中最短路徑批量查詢方法,包括以下步驟:
4、s1:獲取路網(wǎng)中關(guān)于源頂點(diǎn)與目標(biāo)頂點(diǎn)的查詢請(qǐng)求,并將所述此查詢與給定的查詢結(jié)果集中任意一條結(jié)果查詢進(jìn)行相似度匹配;
5、判斷此查詢與結(jié)果查詢的相似度是否滿足預(yù)設(shè)相似度閾值;
6、若滿足,則基于構(gòu)建的查詢匹配策略,根據(jù)查詢結(jié)果集中結(jié)果查詢對(duì)應(yīng)的最短路徑獲取此查詢的最短路徑;
7、否則,執(zhí)行步驟s2;
8、s2:將此查詢放入初始為空集的緩存集中,直至緩存集達(dá)到最大容量或最大存儲(chǔ)時(shí)間時(shí)將其作為將查詢集;
9、s3:基于查詢分解策略,將所述查詢集分解為若干查詢子集;
10、s4:依次獲取各查詢子集的主查詢與副查詢;
11、且所述主查詢即為查詢子集中所有查詢中選擇的一條源頂點(diǎn)與目標(biāo)頂點(diǎn)之間歐氏距離最長(zhǎng)的查詢;
12、所述副查詢即為查詢子集中除主查詢以外的其他查詢;
13、s5:將主查詢的源頂點(diǎn)作為路徑起點(diǎn)加入定義的堆集合中,并基于構(gòu)建的路徑擴(kuò)展策略獲取新路徑,且將新路徑按照預(yù)估最短路徑距離的增序加入堆集合中獲取主查詢擴(kuò)展堆;
14、s6:將副查詢的源頂點(diǎn)作為路徑起點(diǎn)存入定義的保留堆中,并基于構(gòu)建的路徑保留策略獲取副查詢保留堆;
15、s7:基于構(gòu)建的路徑替換策略,根據(jù)主查詢擴(kuò)展堆與副查詢保留堆獲取查詢集中所有查詢的最短路徑。
16、進(jìn)一步的,所述s3具體包括以下步驟:
17、s31:對(duì)查詢集q中的任意兩個(gè)查詢進(jìn)行查詢相似度的計(jì)算,且所述查詢相似度的計(jì)算公式為
18、s(qi,qj)=w1ds(qi,qj)+w2as(qi,qj)
19、
20、as(qi,qj)=cosθ
21、式中:s(qi,qj)表示任意兩個(gè)查詢的查詢相似度,且0≤s(qi,qj)≤1;ds(qi,qj)表示兩條查詢的距離相似度;as(qi,qj)表示兩條查詢的角度相似度;cosθ表示兩條查詢的起點(diǎn)與終點(diǎn)之間直線距離的較小夾角的余弦值;dmax表示兩點(diǎn)間距離相似性閾值;qi,qj表示查詢集q中的任意兩個(gè)查詢,且qi=(si,ti),qj=(sj,tj);si,ti分別表示查詢qi的源頂點(diǎn)與目標(biāo)頂點(diǎn);sj,tj分別表示查詢qj的源頂點(diǎn)與目標(biāo)頂點(diǎn);w1,w2表示用于調(diào)節(jié)起點(diǎn)、終點(diǎn)以及夾角在相似度計(jì)算中重要性的權(quán)重系數(shù);
22、s32:構(gòu)建相似度打分函數(shù),以用于將查詢集q中所有查詢進(jìn)行相似查詢分組,獲取若干查詢子集;
23、且所述相似度打分函數(shù)的表達(dá)式為
24、
25、式中:f(q)表示相似度打分函數(shù);s(qi)表示用來(lái)衡量查詢子集qi內(nèi)查詢間的相似程度的指標(biāo);表示在查詢子集qi中任選兩個(gè)查詢的組合數(shù)目;n表示查詢集q中的查詢數(shù)量;qm,qn表示查詢子集qi中的任意兩個(gè)查詢。
26、進(jìn)一步的,所述s5具體包括以下步驟:
27、s51:將主查詢的源頂點(diǎn)作為路徑起點(diǎn)加入定義的堆集合中,確認(rèn)并選擇所述堆集合中的以源頂點(diǎn)為起點(diǎn)的堆首路徑作為處理路徑path;
28、s52:判斷所述處理路徑path的終點(diǎn)是否達(dá)到主查詢的目標(biāo)頂點(diǎn),若所述處理路徑path的終點(diǎn)未達(dá)到主查詢的目標(biāo)頂點(diǎn),則基于構(gòu)建的路徑擴(kuò)展策略對(duì)該處理路徑path進(jìn)行路徑擴(kuò)展獲取多條新路徑;
29、所述路徑擴(kuò)展策略即為:
30、s521:確認(rèn)處理路徑path的終點(diǎn)v是否為路網(wǎng)中的已擴(kuò)展結(jié)點(diǎn);
31、s522:若確認(rèn)處理路徑path的終點(diǎn)v為未擴(kuò)展結(jié)點(diǎn),則將終點(diǎn)v作為源頂點(diǎn),并將與該終點(diǎn)v相鄰且不屬于處理路徑path中的所有鄰居節(jié)點(diǎn)作為目標(biāo)頂點(diǎn)獲取多條擴(kuò)展新路徑,并執(zhí)行步驟s53;
32、若確認(rèn)處理路徑path的終點(diǎn)v為已擴(kuò)展結(jié)點(diǎn),則舍去該處理路徑path不加入擴(kuò)展堆中;
33、且所述已擴(kuò)展結(jié)點(diǎn)即為將獲取的路網(wǎng)中所有與所述處理路徑path的終點(diǎn)v相鄰且不屬于處理路徑path的鄰居節(jié)點(diǎn),作為處理路徑path的終點(diǎn)v的下一個(gè)結(jié)點(diǎn)形成擴(kuò)展路徑,則將與處理路徑path的終點(diǎn)v相鄰且不屬于所述處理路徑path的鄰居節(jié)點(diǎn)標(biāo)記為已擴(kuò)展結(jié)點(diǎn);
34、s53:將各擴(kuò)展新路徑按照預(yù)估最短路徑距離的增序加入堆集合中,以更新擴(kuò)展堆獲取當(dāng)前主查詢擴(kuò)展堆;
35、s54:根據(jù)貪心算法獲取當(dāng)前主查詢擴(kuò)展堆中的以源頂點(diǎn)為起點(diǎn)的新處理路徑path;若所述新處理路徑path的終點(diǎn)不是目標(biāo)頂點(diǎn),則重復(fù)執(zhí)行步驟s52至s53,直至所述新處理路徑path的終點(diǎn)是目標(biāo)頂點(diǎn),以獲取從源頂點(diǎn)到目標(biāo)頂點(diǎn)的完整路徑得到最終的主查詢擴(kuò)展堆。
36、進(jìn)一步的,所述預(yù)估最短路徑距離的計(jì)算公式為
37、predist(path(vi,v))=dist(path(vi,v))+ldist(v,vj)
38、式中:predist(path(vi,v))表示新路徑到達(dá)目標(biāo)頂點(diǎn)的預(yù)估最短路徑距離;vi表示處理路徑path的源頂點(diǎn);vj表示主查詢的目標(biāo)頂點(diǎn);path(vi,v)表示處理路徑且path(vi,v):<v1=(vi),v2,…,vn=(v)>;dist(path(vi,v))表示vi與v之間的路徑距離;ldist(v,vj)表示當(dāng)前路徑終點(diǎn)v與目標(biāo)頂點(diǎn)vj之間的直線距離。
39、進(jìn)一步的,s6中構(gòu)建的所述路徑保留策略依次包括鄰居節(jié)點(diǎn)保留策略、擴(kuò)展節(jié)點(diǎn)保留策略以及刪除路徑保留策略;
40、所述鄰居節(jié)點(diǎn)保留策略:當(dāng)主查詢路徑擴(kuò)展過(guò)程中擴(kuò)展至鄰居節(jié)點(diǎn)si時(shí),將鄰居節(jié)點(diǎn)si至當(dāng)前處理路徑的所有節(jié)點(diǎn)節(jié)點(diǎn)之間的路徑距離存入保留堆中;
41、所述擴(kuò)展節(jié)點(diǎn)保留策略:當(dāng)主查詢路徑擴(kuò)展過(guò)程中對(duì)鄰居節(jié)點(diǎn)si進(jìn)行擴(kuò)展時(shí),將鄰居節(jié)點(diǎn)si至鄰居節(jié)點(diǎn)si的鄰居節(jié)點(diǎn)的路徑距離存入保留堆,并刪除路徑終點(diǎn)v重復(fù)的路徑且保留重復(fù)路徑中路徑距離小的路徑;
42、所述刪除路徑保留策略:當(dāng)主查詢路徑擴(kuò)展過(guò)程中有路徑終點(diǎn)為v的刪除路徑path′(si,v);
43、則確認(rèn)刪除路徑path′(si,v)與處理路徑path(si,v)的路徑距離大??;
44、若刪除路徑path′(si,v)比處理路徑path(si,v)的路徑距離小,則將刪除路徑path′(si,v)存入保留堆,否則,將處理路徑path(si,v)存入保留堆,以獲取獲取副查詢保留堆;
45、其中所述刪除路徑path′(si,v)為與主查詢擴(kuò)展堆中的處理路徑path(si,v)有相同首尾節(jié)點(diǎn)的路徑。
46、進(jìn)一步的,s7中構(gòu)建的所述路徑替換策略具體為
47、當(dāng)主查詢擴(kuò)展到副查詢的目標(biāo)頂點(diǎn)時(shí),基于路徑替換策略根據(jù)主查詢擴(kuò)展堆中所有路徑獲取替換路徑;
48、所述替換路徑的獲取方法為:
49、給定主查詢擴(kuò)展堆中任意一條路徑path=<smain,…,vj,…,vi>與副查詢保留堆中的路徑path′=<si,…,vj>;
50、則將<smain,…,vj,…,vi>的子路徑<smain,…,vj>替換為<si,…,vj>,獲取副查詢保留堆中源頂點(diǎn)si到主查詢擴(kuò)展堆中所有路徑終點(diǎn)vi的路徑<si,…,vi>,記作副查詢保留堆中的路徑path′(si,vi)的替換路徑。
51、進(jìn)一步的,s1中構(gòu)建的所述查詢匹配策略具體為:
52、s11:定義一個(gè)匹配堆hmatch且初始為空集;
53、給定一條查詢q=(s,t),并根據(jù)查詢結(jié)果集rset預(yù)設(shè)的倒排列表,確認(rèn)是否存在對(duì)應(yīng)源頂點(diǎn)s與目標(biāo)頂點(diǎn)t相同的倒排列表的路徑編號(hào);
54、若存在相同路徑編號(hào)p,則將路徑編號(hào)p作為查詢q的匹配路徑;
55、若不存在相同路徑編號(hào)p,則獲取與源頂點(diǎn)s與目標(biāo)頂點(diǎn)t相鄰的鄰居節(jié)點(diǎn)的點(diǎn)集合,并將源頂點(diǎn)s的鄰居節(jié)點(diǎn)的點(diǎn)集合記為源集s;
56、將目標(biāo)頂點(diǎn)t的鄰居節(jié)點(diǎn)的點(diǎn)集合記為目的集t,并獲取源集s與目的集t的倒排列表內(nèi)相同的多個(gè)路徑編號(hào);
57、根據(jù)路徑編號(hào)獲取距離源頂點(diǎn)s與目標(biāo)頂點(diǎn)t最近的一對(duì)鄰居節(jié)點(diǎn)(s′,t′)對(duì)應(yīng)的路徑p′(s′,t′)作為查詢q的匹配路徑,且s′∈s,t′∈t;
58、并將所述查詢q的匹配路徑放入匹配堆hmatch中;
59、s12:根據(jù)查詢q=(s,t)與對(duì)應(yīng)的匹配路徑獲取查詢q的初始處理路徑path<s,…,t>;其中,…表示待填充路徑;
60、基于正向擴(kuò)展策略與反向擴(kuò)展策略,對(duì)所述初始處理路徑path<s,…,t>進(jìn)行路徑填充獲取正向/反向擴(kuò)展路徑;
61、所述正向擴(kuò)展策略:獲取初始處理路徑path<s,…,t>的待填充部分前的最后一個(gè)節(jié)點(diǎn)作為正向擴(kuò)展節(jié)點(diǎn)v;
62、獲取與正向擴(kuò)展節(jié)點(diǎn)v相鄰且不屬于初始處理路徑path<s,…,t>中的所有節(jié)點(diǎn)vneighbor,并將正向擴(kuò)展節(jié)點(diǎn)v作為源頂點(diǎn),將節(jié)點(diǎn)vneighbor作為目標(biāo)頂點(diǎn)以獲取多條正向擴(kuò)展路徑;
63、所述反向擴(kuò)展策略:獲取初始處理路徑path<s,…,t>的待填充部分后的第一個(gè)節(jié)點(diǎn)作為反向擴(kuò)展節(jié)點(diǎn)v′;
64、獲取與反向擴(kuò)展節(jié)點(diǎn)v′相鄰且不屬于path<s,…,t>中的所有節(jié)點(diǎn)vneighbor′,并將反向擴(kuò)展節(jié)點(diǎn)v′作為源頂點(diǎn),將節(jié)點(diǎn)vneighbor′作為目標(biāo)頂點(diǎn)以獲取多條反向擴(kuò)展路徑;
65、s13:根據(jù)所述正向擴(kuò)展路徑與反向擴(kuò)展路徑隨機(jī)組合,獲取若干條最終處理路徑path;
66、并基于匹配預(yù)估最短路徑距離計(jì)算公式,獲取各最終處理路徑path的匹配預(yù)估最短路徑距離mpredist,并將各最終處理路徑path按照匹配預(yù)估最短路徑距離mpredist的遞增的順序加入匹配堆hmatch中,以更新匹配堆hmatch;
67、并根據(jù)更新后的匹配堆hmatch獲取對(duì)應(yīng)查詢q的最短路徑。
68、進(jìn)一步的,s13中所述匹配預(yù)估最短路徑距離計(jì)算公式為
69、
70、式中:mpredist(path(vi,v))表示路徑path(vi,v)到達(dá)目標(biāo)頂點(diǎn)vj的可匹配預(yù)估最短路徑距離;dist(vi,v)表示源頂點(diǎn)vi與當(dāng)前路徑終點(diǎn)v之間的路徑距離;dist(vn,vj)表示節(jié)點(diǎn)vn與目標(biāo)頂點(diǎn)vj之間的路徑距離;ldist(v,vn)為當(dāng)前路徑終點(diǎn)v與節(jié)點(diǎn)vn之間的直線距離。
71、有益效果:本發(fā)明提供了一種路網(wǎng)中最短路徑批量查詢方法,首先提出了查詢分解策略,在此基礎(chǔ)上構(gòu)建出得到一組相似度較高的查詢子集,并從中選擇一條主查詢;然后提出了路徑擴(kuò)展策略、路徑保留策略以及路徑替換策略,在主查詢進(jìn)行擴(kuò)展的過(guò)程中將部分對(duì)副查詢有用的信息存入副查詢保留堆并進(jìn)行路徑替換,從而在處理主查詢的最短路徑的過(guò)程中得到副查詢的最短路徑,大大提高了查詢效率,最后還通過(guò)構(gòu)建的查詢匹配策略,利用已有的結(jié)果集來(lái)快速得到一條查詢的最短路徑結(jié)果,最大程度的提高了計(jì)算效率并減少存儲(chǔ)代價(jià)。