基于集中式平臺(tái)的最短路徑關(guān)鍵節(jié)點(diǎn)查詢方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及的是一種計(jì)算機(jī)圖論領(lǐng)域的技術(shù),具體是一種基于集中式平臺(tái)的最短 路徑關(guān)鍵節(jié)點(diǎn)查詢方法。
【背景技術(shù)】
[0002] 目前有許多最短路徑方面的算法,即節(jié)點(diǎn)S到節(jié)點(diǎn)t的最短路徑記為SP(s,t), 相應(yīng)的最短距離為dist(s,t)。Disjktra是圖論單源最短路徑問(wèn)題的經(jīng)典算法,但其效率 不能滿足主流需求。近年涌現(xiàn)出許多相關(guān)的高效算法,比如A*,一種啟發(fā)式的節(jié)點(diǎn)對(duì)節(jié)點(diǎn) 最短路徑直接搜索算法;比如結(jié)合了地標(biāo)(landmark)思想,應(yīng)用三角形邊長(zhǎng)不等式約束的 ALT算法;比如Abraham等人提出的hub標(biāo)簽算法(hublabeling,HL);以及縮略層次算法 (ContractionHierarchies,CH),一種含有索引結(jié)構(gòu)的預(yù)處理最短路徑算法,通過(guò)在預(yù)處 理中添加shortcut來(lái)提高查詢效率。
[0003] Abraham等人提出的層次hub標(biāo)簽(Hierarchicalhublabeling)算法中,將所有 節(jié)點(diǎn)按照一定標(biāo)準(zhǔn)排序,使得每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)不同的層次(level)。每個(gè)節(jié)點(diǎn)u包含兩個(gè) 標(biāo)簽:前向標(biāo)簽Lf(u)和逆向標(biāo)簽Lr(u)。以前向標(biāo)簽為例,每個(gè)節(jié)點(diǎn)的標(biāo)簽里都存儲(chǔ)著一 個(gè)二元集合{(Vi,d(u,V》),(v2,d(u,v2)),. . .,(vx,d(u,vx))},每個(gè)二元組由一個(gè)節(jié)點(diǎn)vi和 u與這個(gè)節(jié)點(diǎn)之間的距離d(u,vj(在逆向標(biāo)簽中,貝lj為d(X,u))組成。節(jié)點(diǎn)u的標(biāo)簽包含 了u的部分連接信息。層次hub標(biāo)簽滿足覆蓋屬性:對(duì)于兩個(gè)任意節(jié)點(diǎn)s和t,必有一個(gè)在 s-t最短路徑上的節(jié)點(diǎn)W,它同時(shí)屬于Lf(S)和Lr(t),而且它是最短路徑SP(s,t)上層次 最高的節(jié)點(diǎn)。
[0004] Akiba等人在《FastExactShortest-PathDistanceQueriesonLarge NetworksbyPrunedLandmarkLabeling》提出的剪枝標(biāo)簽構(gòu)造(PL)是一種標(biāo)簽構(gòu)造方 法,通過(guò)大量剪枝來(lái)實(shí)現(xiàn)層次hub標(biāo)簽的高效構(gòu)造。
[0005] 然而,在大多數(shù)情況下并不需要詳細(xì)、完整的最短路徑,只需要得到部分子路徑 即可,因而一些路徑概要算法成為研究熱節(jié)點(diǎn)。YufeiTao等人2011年在《Onk-skip ShortestPaths》提出的k-skip算法也是一種路徑概要算法,對(duì)查詢節(jié)點(diǎn)對(duì),能給出k-skip最短路徑P* :實(shí)際最短路徑上每k個(gè)連續(xù)的節(jié)點(diǎn)就至少有一個(gè)節(jié)點(diǎn)在P*里,也就是 說(shuō),P*按至少1/k的概率給P采樣。
[0006] 在日常生活中,往往可以憑借經(jīng)驗(yàn)判斷路網(wǎng)上各節(jié)點(diǎn)的重要性,即其關(guān)鍵度。關(guān)鍵 度代表著節(jié)點(diǎn)在路網(wǎng)中的重要性,不同的關(guān)鍵度定義和排序,會(huì)造成標(biāo)簽構(gòu)造結(jié)果的差異。 全部節(jié)點(diǎn)的關(guān)鍵度可以被視為所有節(jié)點(diǎn)的一個(gè)全序,將節(jié)點(diǎn)V的關(guān)鍵度表示為r(v)。
[0007] 經(jīng)過(guò)對(duì)現(xiàn)有技術(shù)的檢索發(fā)現(xiàn),中國(guó)專利文獻(xiàn)號(hào)CN102521364B,公告日 2014. 10. 15,公開(kāi)了一種圖上兩節(jié)點(diǎn)間最短路徑的查詢方法,包括:1)從圖上隨機(jī)抽取若 干節(jié)點(diǎn)作為支節(jié)點(diǎn),根據(jù)各支節(jié)點(diǎn)間的最短路徑得出圖上每節(jié)點(diǎn)的中間性估計(jì)值;2)將中 間性估計(jì)值大于設(shè)定值的節(jié)點(diǎn)作為中心節(jié)點(diǎn),將圖中各節(jié)點(diǎn)到各中心節(jié)點(diǎn)的最短路徑信息 加入圖中各節(jié)點(diǎn)的hop信息,這些中心節(jié)點(diǎn)的集合記為Wb;3)將圖去除Wb中各節(jié)點(diǎn)后分割 為若干小圖Si,并得到節(jié)點(diǎn)割集Ws;4)對(duì)于每個(gè)小圖Si根據(jù)枚舉出的任意兩節(jié)點(diǎn)間最短 路徑,得到該小圖Si內(nèi)所有節(jié)點(diǎn)的hop信息;5)根據(jù)Wb中各節(jié)點(diǎn)到Ws中各節(jié)點(diǎn)的最短路 徑得到不同小圖之間的節(jié)點(diǎn)的hop信息;6)根據(jù)圖中各節(jié)點(diǎn)的hop信息,得到用戶輸入的 兩查詢節(jié)點(diǎn)的最短路徑。但該技術(shù)需要輔助查詢以確定鄰節(jié)點(diǎn),雖在預(yù)處理階段耗時(shí)較短, 但在查詢階段需要更長(zhǎng)的時(shí)間,限制了查詢效率的提高。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明針對(duì)現(xiàn)有技術(shù)存在的上述不足,提出一種基于集中式平臺(tái)的最短路徑關(guān)鍵 節(jié)點(diǎn)查詢方法,算法分為預(yù)處理和查詢兩個(gè)階段。在預(yù)處理階段構(gòu)造層次標(biāo)簽,使其滿足覆 蓋性質(zhì)。查詢時(shí)通過(guò)調(diào)取標(biāo)簽和拆分路徑,返回最短路徑上指定個(gè)數(shù)的關(guān)鍵節(jié)點(diǎn)。
[0009] 本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
[0010] 本發(fā)明通過(guò)在集中式平臺(tái)上對(duì)圖中的所有節(jié)點(diǎn)按照關(guān)鍵度由高到低進(jìn)行:
[0011] a)剪枝標(biāo)簽構(gòu)造,對(duì)應(yīng)得到每個(gè)節(jié)點(diǎn)的滿足覆蓋性質(zhì)的層次標(biāo)簽,或者是
[0012] b)改進(jìn)型剪枝標(biāo)簽構(gòu)造對(duì)應(yīng)得到每個(gè)節(jié)點(diǎn)的滿足真覆蓋性質(zhì)的層次標(biāo)簽,
[0013] 然后通過(guò)任意節(jié)點(diǎn)對(duì)間的最短路徑關(guān)鍵節(jié)點(diǎn)查詢,返回最短路徑上指定個(gè)數(shù)的關(guān) 鍵節(jié)點(diǎn)。
[0014] 所述的剪枝標(biāo)簽構(gòu)造是指:對(duì)圖中的每個(gè)節(jié)點(diǎn)進(jìn)行剪枝Dijkstra搜索和HL算法 查詢,得到滿足覆蓋性質(zhì)的層次標(biāo)簽。
[0015] 所述的覆蓋性質(zhì)是指:對(duì)任意一對(duì)節(jié)點(diǎn)對(duì)<s,t>,其標(biāo)簽Lf(s)和Lr(t)的交集包 含該節(jié)點(diǎn)對(duì)之間最短路徑SP(s,t)上關(guān)鍵度最高的節(jié)點(diǎn)。
[0016] 所述的改進(jìn)型剪枝標(biāo)簽構(gòu)造是指:通過(guò)修改標(biāo)簽構(gòu)造方式,使其滿足真覆蓋性質(zhì) 以進(jìn)一步提高查詢時(shí)的效率。
[0017] 所述的真覆蓋性質(zhì)是指:對(duì)任意一對(duì)節(jié)點(diǎn)對(duì)<s,t>,其標(biāo)簽Lf(s)和Lr(t)的交集 包含最短路徑SP(s,t)上關(guān)鍵度最高的非端節(jié)點(diǎn)節(jié)點(diǎn)。
[0018] 所述的最短路徑關(guān)鍵節(jié)點(diǎn)查詢,通過(guò)輸入查詢節(jié)點(diǎn)對(duì),經(jīng)過(guò)迭代地進(jìn)行:調(diào)取標(biāo) 簽、更新優(yōu)先隊(duì)列并進(jìn)行路徑拆分的過(guò)程,查找最短路徑中的關(guān)鍵節(jié)點(diǎn)并返回指定個(gè)數(shù)的 關(guān)鍵節(jié)點(diǎn)。
[0019] 針對(duì)剪枝標(biāo)簽構(gòu)造的層次標(biāo)簽,其拆分路徑的具體操作為,將包含關(guān)鍵節(jié)點(diǎn)的子 路徑從關(guān)鍵節(jié)點(diǎn)的前、后相鄰節(jié)點(diǎn)位置拆分為三個(gè)子路徑,并在拆分后的第一個(gè)和第三個(gè) 子路徑中迭代調(diào)取標(biāo)簽并得到新的關(guān)鍵節(jié)點(diǎn)。
[0020] 針對(duì)改進(jìn)型剪枝標(biāo)簽構(gòu)造的層次標(biāo)簽,其拆分路徑的具體操作為,將包含關(guān)鍵節(jié) 點(diǎn)的子路徑從關(guān)鍵節(jié)點(diǎn)位置拆分為兩個(gè)子路徑,并在拆分后的兩個(gè)子路徑中迭代調(diào)取標(biāo)簽 并得到新的關(guān)鍵節(jié)點(diǎn)。
[0021] 所述的關(guān)鍵度,即覆蓋能力,具體是指:一個(gè)節(jié)點(diǎn)所覆蓋的最短路徑個(gè)數(shù)。當(dāng)一條 最短路徑經(jīng)過(guò)一個(gè)節(jié)點(diǎn)V,則該節(jié)點(diǎn)v覆蓋了這條最短路徑。
[0022] 所述的覆蓋能力C(v) = Es,t EV〇(s, t, V),其中:〇(s, t, V)是v經(jīng)過(guò)的最短路徑 (S,t)的個(gè)數(shù)。
[0023] 所述的關(guān)鍵節(jié)點(diǎn)是指:在最短路徑上關(guān)鍵度最高的前k個(gè)節(jié)點(diǎn),其中:k值由查詢 者指定。 技術(shù)效果
[0024] 與現(xiàn)有技術(shù)相比,本發(fā)明通過(guò)在預(yù)處理階段進(jìn)行關(guān)鍵度排序和層次Hub標(biāo)簽構(gòu) 造,得到了具有覆蓋屬性的層次標(biāo)簽,能夠高效地返回關(guān)鍵節(jié)點(diǎn);而在優(yōu)化的純標(biāo)簽算法 里,在關(guān)鍵節(jié)點(diǎn)查詢的過(guò)程中不需要再進(jìn)行輔助查詢,可直接進(jìn)行路徑拆分,減少了查詢耗 時(shí),提高了查詢效率。
【附圖說(shuō)明】
[0025] 圖1為本發(fā)明示意圖;
[0026] 圖2為實(shí)施例關(guān)鍵節(jié)點(diǎn)查詢不意圖;
[0027] 圖3為簡(jiǎn)單路網(wǎng);
[0028] 圖4為圖3所示簡(jiǎn)單路網(wǎng)的預(yù)處理和關(guān)鍵節(jié)點(diǎn)查詢示意圖;
[0029]圖中:Queue是一個(gè)優(yōu)先級(jí)隊(duì)列,能夠保存當(dāng)前的候選的關(guān)鍵節(jié)點(diǎn),并輸出隊(duì)列中 關(guān)鍵度最高的節(jié)點(diǎn)。
[0030] 圖5為k= 20時(shí)基本關(guān)鍵節(jié)點(diǎn)查詢和純標(biāo)簽關(guān)鍵節(jié)點(diǎn)查詢效率圖;
[0031] 圖6為路網(wǎng)Rome99基本關(guān)鍵節(jié)點(diǎn)查詢和純標(biāo)簽關(guān)鍵節(jié)點(diǎn)查詢效率圖;
[0032] 圖7為路網(wǎng)BAYsl5164基本關(guān)鍵節(jié)點(diǎn)查詢和純標(biāo)簽關(guān)鍵節(jié)點(diǎn)查詢效率圖;
[0033] 圖8為路網(wǎng)Fs52781基本關(guān)鍵節(jié)點(diǎn)查詢和純標(biāo)簽關(guān)鍵節(jié)點(diǎn)查詢效率圖;
[0034] 圖9為路網(wǎng)NWslll729基本關(guān)鍵節(jié)點(diǎn)查詢和純標(biāo)簽關(guān)鍵節(jié)點(diǎn)查詢效率圖;
[0035] 圖10為路網(wǎng)NewYork基本關(guān)鍵節(jié)點(diǎn)查詢和純標(biāo)簽關(guān)鍵節(jié)點(diǎn)查詢效率圖;
[0036] 圖11為路網(wǎng)BAY基本關(guān)鍵節(jié)點(diǎn)查詢和純標(biāo)簽關(guān)鍵節(jié)點(diǎn)查詢效率圖。
【具體實(shí)施方式】
[0037] 下面對(duì)本發(fā)明的實(shí)施例作詳細(xì)說(shuō)明,本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行 實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施 例。 實(shí)施例1
[0038] 如圖1所示,基本的最短路徑關(guān)鍵節(jié)點(diǎn)查詢算法的實(shí)施例包括以下步驟:
[0039] 步驟1、定義關(guān)鍵度,對(duì)圖中的節(jié)點(diǎn)v按照關(guān)鍵度r(v)進(jìn)行采樣排序。
[0040] 所述的關(guān)鍵度采用覆蓋能力進(jìn)行定義。
[0041] 所述的排序采用OpenMP多線程處理。
[0042] 步驟2、基于集中式平臺(tái)對(duì)節(jié)點(diǎn)v按關(guān)鍵度r(v)從高到低進(jìn)行預(yù)處理,構(gòu)造標(biāo)簽。
[0043] 所述的標(biāo)簽通過(guò)剪枝標(biāo)簽構(gòu)造得到,具體包括:
[0044] 步驟2. 1)設(shè)當(dāng)前處理的節(jié)點(diǎn)為u,以u(píng)為根節(jié)點(diǎn)進(jìn)行剪枝Dijkstra搜索,對(duì)搜索 到的每一個(gè)節(jié)點(diǎn)w,保留一個(gè)u-w最短路徑上關(guān)鍵度最高的節(jié)點(diǎn)x,x有可能是端節(jié)點(diǎn)。
[0045] 步驟2. 2)對(duì)所述的節(jié)點(diǎn)對(duì)(u,w)進(jìn)行HL算法查詢,HL算法查詢HLquery(u,w) 能夠返回由當(dāng)前不完整標(biāo)簽得到的節(jié)點(diǎn)對(duì)(u,w)之間的最短距離d(u,w),并將它與(u,w) 的真正最短距離dist(u,w)相較,如果HLquery(u,w) =d(u,w)彡dist(u,w),則將以u(píng)為 根節(jié)點(diǎn)的最短路徑樹(shù)中的以w為根節(jié)點(diǎn)的子樹(shù)剪枝,得到剪枝的最短路徑樹(shù)SPT'(u)。
[0046] 步驟2. 3)對(duì)最短路徑樹(shù)SPT'(u)中的節(jié)點(diǎn)添加標(biāo)簽。
[0047] 所述的添加標(biāo)簽是指:將u添加進(jìn)SPT'(u)中每個(gè)節(jié)點(diǎn)的標(biāo)簽中,以保證圖中每 個(gè)節(jié)點(diǎn)對(duì)(u,W)都被節(jié)點(diǎn)U覆蓋。
[0048] 步驟3、對(duì)完成標(biāo)簽構(gòu)造的圖中的節(jié)點(diǎn)進(jìn)行關(guān)鍵節(jié)點(diǎn)查詢。
[0049] 所述的關(guān)鍵節(jié)點(diǎn)查詢定義為:給定一個(gè)四元組(G,s, t,k),G為圖,s為起節(jié)點(diǎn),t 為終節(jié)點(diǎn),k為指定的返回關(guān)鍵節(jié)點(diǎn)個(gè)數(shù),查詢結(jié)果將返回一個(gè)k元關(guān)鍵節(jié)點(diǎn)組kTop= ((VptKs^),(v2,d(s,v2)),…,(>15,(1(8,¥15))),并由這些節(jié)點(diǎn)構(gòu)成壓縮路徑1^1:11 = s->vy->vik*" ->t,Vi~Vk為最短路徑SP(s, t)上前k個(gè)關(guān)鍵節(jié)點(diǎn),il~ik是按照實(shí) 際最短路徑位置對(duì)這些關(guān)鍵節(jié)點(diǎn)進(jìn)行排序的序號(hào)。定義一條路徑P上的所有節(jié)點(diǎn)集合為 V(P),P上的節(jié)點(diǎn)數(shù)量為|V⑵|。將kPath上節(jié)點(diǎn)組成的集合稱為V(kPath),這些節(jié)點(diǎn)數(shù) 則為IV(kPath)|。如果路徑 |V(kPath) | <k,那么說(shuō)明kPath (s, t)=SP (s, t)。
[0050] 如圖2所示,所述的關(guān)鍵節(jié)點(diǎn)查詢具體包括:
[0051] 步驟3. 1)輸入查詢節(jié)點(diǎn)對(duì)(s,t),調(diào)取s和t的標(biāo)簽,得到關(guān)鍵節(jié)點(diǎn)