近十年one-to-one最短路算法研究整理

前言:針對單源最短路算法,目前最經典的思路即標號算法,以Dijkstra算法和Bellman-Ford算法爲根本演進了各類優化技術和算法。針對複雜網絡,傳統的優化思路是在數據結構和雙向搜索上作文章,或者針對沒必要要的循環進行排除。近年來,最短路算法大量應用於須要高及時性的領域,好比GIS領域,也大量應用於網絡規模巨大的社會網絡分析領域,這使得傳統思路並不能很好地解決,因而把最短路算法思路自己抽象成兩階段算法,第一階段爲數據預處理,第二階段爲實時地搜索。這兩者是互相矛盾的,如何找到平衡是各類算法技術所追求的。針對大規模網絡,傳統算法因爲其複雜度與E或V必然有關係,甚至是線性關係這使得算法技術的直接應用沒法知足要求,因此廣泛會結合分層技術,經過分治與劃分,把網絡從新劃分紅多個子網或者多層網絡來使傳統算法技術也能很好的應用。其次,傳統算法可能是爲單源多目的而設計,並且搜索範圍不少時候過大致使性能降低,所以採用目標引導技術縮小搜索範圍約束搜索方向,能夠極高的提升算法性能。從這兩個大思路上,有了一系列的優化技術。但值得注意的是,這些技術大多針對靜態網絡,少數技術對動態網絡有較好的擴展,但徹底針對動態網絡的技術並不成熟,動態網絡的路由還須要不少研究。node

 

 

一.         符號約定:算法

a)       E表明邊或者邊數,V表明頂點或者定點數,s標示出發點,t表明終點,R表明稀疏度,即E/V,w表明邊的權重,d(i)表明節點i到出發點的距離標記,l(I,j)標示從i到j的距離,e(i,t)表示從節點i到t的估計值,E(s,t)表示從s到t的距離估計值網絡

 

二.         基本加速技術數據結構

a)       優先隊列系列app

                        i.              經過堆結構加速:函數

  1. K叉堆,性能O(ElgV)適用於稀疏度較小的圖。實驗結果代表,通常取2或4[ 1 ][ 2 ]
  2. 斐波拉切堆:其在堆插入上性能好過K叉堆,但其在取出最小值時的表現較差。其優點體如今若是R極高,則性能優點大。若是應用場合是交通圖等R值不夠高(不高於10)時,並不比K叉堆好。

                      ii.              經過桶結構加速[ 2 ]post

  1. 性能取決於最大邊權值C,算法複雜度爲:O(E+CV);桶算法自己能夠繼續優化,但優化的是桶的數據結構,流行的有這麼幾種,一是把連續桶空間平均劃分以後減小桶數量的桶壓縮算法和經過把大於某個長度的數據存在一個桶中,強行減小桶數量的桶截斷算法。還有基於雙桶結構的算法。這一類基於桶的算法因爲優化點在選邊這一環節上,故在稠密圖上性能很是之好。

b)      雙向搜索性能

                        i.              思路:傳統的單向搜索技術會致使搜索範圍過大,不少無效搜索,採用雙向搜索能夠限制搜索範圍。優化

                      ii.              應用和缺點:雙向搜索技術自己並不能帶來很好的性能提高,但在配合其餘技術使用時能夠帶來不錯的性能提高,緣由在於雙向搜索對搜索範圍的限制。同時雙向搜索技術能夠弱化終止規則,犧牲必定的準確性而帶來性能提高設計

c)       預處理技術

                        i.              預處理技術自己是將搜索算法兩階段化和實時要求的產物,因爲預處理必然帶來空間的消耗,因此其自己並不單獨使用而是做爲一個輔助技術,配合目標引導技術或者分層搜索技術獲得性能提高

 

三.         目標引導思想

a)       思路:傳統算法可能是爲單源多目的而設計,並且搜索範圍不少時候過大致使性能降低,所以採用目標引導技術縮小搜索範圍約束搜索方向,能夠極高的提升算法性能。目標引導策略大體分爲四種:基於A*,基於剪枝,基於路標和基於潛在目標

b)      基於剪枝思想:

                        i.              思路:既然在搜索過程當中,有不少節點不可能通過,那麼在每個搜索以前先判斷一下接下來前往的區域有沒有必要進行搜索便可。因此該思想指導下的技術核心在於如何判斷某個區域是否有必要搜索以及如何劃分區域。

                      ii.              核心原理:對於L(i) + e(i,t) <= E(s,t)的區域纔有必要進行搜索,而e(i,t)越是小於真實值,E(s,t)越是大於真實值,該算法越能獲得最優解,但性能會降低。反之性能會上升,但可能會犧牲準確性。該步驟只需在傳統算法提取點進行搜索以前先判斷一下便可。這種思想還有個可取之處。此類算法一般又一個估計值,當估計值永不高於實際值的時候(傳統A*算法),算法必定能求到最優解。有趣的在於,估計值若是高於實際值,那麼其速度大幅度提高,但不必定有最優解,這在堆精確度要求不高的狀況下頗有用,能夠經過調整估計值和真實值的關係來調整策略,那麼如何才能知道估計值與真實值的關係呢,這就是爲何此類算法都要搭配數據預處理的緣由,數據預處理一部分讓程序能夠判斷估計值和真實值的關係而又沒必要所有算出來,這就是此類算法在最短路算法的矛盾兩階段上找到的平衡。

                    iii.              具體實現策略:

  1. 先進先出算法,SPFA,固定序算法,拓撲序算法,劃分算法:幾個算法放在一塊兒是由於其思路極爲類似,且都是基於Bellman-Ford算法的改進。幾種算法的改進思路都是同樣的。Bellman-Ford算法慢就慢在兩個地方,一是每一個點可能屢次入隊,二是搜索的不少點是沒有必要的,而關於這一點目前的解決思路有二:一是判斷此點是否在有效搜索範圍內,二是經過拓撲序的性質控制點搜索的順序。從這兩個地方入手,這四種算法的基本手段都是利用一個集合來存儲下一個循環要循環的點,而是否進入這個集合的判斷依據就是若是一次迭代過程當中某個點沒有被鬆弛,那麼與其相關的邊也不會再起效,下一輪迭代就沒有必要從它開始去作搜索了。而這幾種算法的不一樣之處在於集合的使用。其中SPFA,先進先出算法,拓撲序算法和固定序算法在初始化時將s放入集合中而後進入算法過程。而SPFA,先進先出算法,拓撲序算法和固定序算法的區別又在於從集合中取出點的順序並不一樣,固定序算法是按照頂點序號取出,而拓撲序算法會先進行拓撲排序。而劃分算法在初始化時將全部頂點放入集合中再開始算法過程。這幾種算法沒有明顯優劣,針對不一樣的規模和不一樣的稀疏度有不一樣的表現。對好比下:相同網絡規模,稀疏度越大,先進先出性能越好,但若是稀疏度相同,網絡規模越大,固定序算法的性能越好,網絡規模若是足夠大,固定序會避免其在小規模的劣勢,始終保持優點。而拓撲序算法也不見得比固定序算法效率更高。傳統劃分算法性能廣泛佔劣勢,因此目前通常都是使用先進先出策略的劃分算法。截止2012年,先進先出策略的劃分算法加上門檻策略,是面對負權圖最好的最短路算法。
  2. PCD(Precomputing Cluster Distances)算法:此處的算法並不是指PCD算法這一個算法,而是這一類算法思想,即數據預處理+分割思想在剪枝技術的應用。其中PCD算法將網絡分割爲若干簇,對任意簇之間的距離用兩個簇之間的最短距離表徵。該算法分爲兩階段,第一階段爲預處理階段,完成如下任務:一是對圖進行分割,該算法的分割算法是K-cluster,實際實現是K’-cluster-oversampling算法。這裏有個思路是很值得玩味的,就是設置一個虛擬節點,和其餘節點的邊權值爲0,而後求一次最短路樹。但我不認爲這個算法的分割性能很好。預處理階段作的第二件事是求不一樣簇的最短距離和相應的節點。第二階段是實時搜索,剪枝依據是:

 

                            上界在搜索到一個cluster的邊界點時更新,更新依據是:

,這個能夠做爲上界

                           

與PCD算法思想相似的還有提出的算法,該算法分爲兩階段和兩種狀況。第一階段依然是預處理,即利用社團識別技術對網絡進行分割降解。兩種狀況中第一種狀況是初始點與目標點位於同一子網絡內部的情形,採用對搜索區域重構的辦法來計算最優路徑(重構的搜索區域由該子網絡內部的節點、邊以及預處理階段修正的邊構成);第二種狀況是初始點與目標點
位於不一樣子網絡的情形,定義了子網絡座標並使用歐式距離來近似估計子網絡間距離,經過選取距離較近的子網絡對並將搜索範圍限定在其內部加速算法。這種算法還能夠必定程度上擴展到動態網絡。以後再表

 

c)       基於A*算法:

                        i.              核心思想:這一類算法有兩個重要的進步:一是並不像傳統Dijkstra算法那樣單一的使用邊權值做爲參考,而是採用已知距離g(x)加上估計距離h(x)來做爲參考;二是在約束搜索範圍時,並不簡單地採用雙向搜索,二是採用在單向搜索是,估計值是當前搜索節點到目的地的距離,這樣的方法一是能夠起到雙向搜索全部的約束搜索範圍的效果,二是沒必要承受雙向搜索帶來的存儲消耗。如前文所述,當估計值永不高於實際值的時候(admissible),算法必定能求到最優解。有趣的在於,估計值若是高於實際值,那麼其速度大幅度提高,但不必定有最優解。關於A*算法的改進不少:

                      ii.              實現策略與改進算法:

a)       A*算法:A*算法的實施方法如上所言,在我看來,A*算法在最短路搜索技術上的突破在於結合了啓發式技術和形式化的技術,即結合了圖自己的信息作動態分析和數學的形式化分析,並使得最短路搜索從按照某種規則去尋找最短路成了按照某個方向去搜索。

b)      Dijkstra式A*算法:經過Dijkstra算法的步驟實現A*算法。這種方法實際上是利用了Pohl提出的勢函數來實現的。以鄰接矩陣爲例,只須要將矩陣元素Dij改成Dij+Djt-Dit,實驗證實,這裏引入的Djt-Dit起到的效果就是h(x)的效果,便是約束搜索方向。從這裏能夠看出,A*算法的核心思想是儘可能沿着歐式最短距離從出發點向目的點進行搜索。

c)       ALT算法/ACT算法:即A*算法加地標加三角不等式技術的綜合算法。ACT算法是ALT算法的一個改進,故放在一塊兒討論。ALT算法的手段是在數據預處理階段選取少數幾個地標,而後在搜索過程當中,經過三角不等式獲得勢函數,而後用A*算法進行搜索。其地標選取採起的是maxcover,即最大覆蓋。但maxcover的地標選取十分耗時,ACT作出改進,將地標選取改成中心點選取,此處採用貪心算法便可。而後經過中心點和三角不等式計算獲得多個勢函數,從而選出最大的勢函數,而後在A*搜索過程當中,利用REACH剪枝技術。

d)      D*算法是改進的A*算法,很好的解決了動態尋路問題,其核心思想有兩點:一是其預處理階段計算的時目標節點到其前節點的距離,二是在檢測到下一個節點阻出情況時,經過更新受影響節點的值,並搜尋哪個鄰居節點是當前最近的。這裏的搜索方法是反覆的調整節點是在下降距離仍是增長距離的標記。D*算法的優化是focused D*

e)       Lifelong Planning A* (LPA*)/ D*lite:其核心思想在於在發生拓撲發生變化時要充分利用已經有的計算結果。因此在拓撲變化以後,經過三角不等式找到那些變化了的邊,而後將這些邊的目的節點進行更新而後從新計算最短路樹,只不過在此次計算時,使用A*優先搜索那些改變了的頂點,更新方式仍然是三角不等式。從這裏能夠看出,Bellman-Ford算法提出的鬆弛原理是在尋找最短路時效果至關好的依據。

f)        Iterative deepening A* (IDA*):核心思路是A*加上迭代加深算法。迭代加深算法的思路就是在深度優先,每個深度只搜索一次,搜索不到,就去下一個深度。與A*的結合在於去尋找那些最有可能的點。基本步驟設定一個深度極限Dmax,當前搜索的深度不能超過Dmax,若是超過,則更新一下Dmax從新搜索過。若是沒有超過Dmax而且沒有找到目標的話,就去下一個深度搜索。這個算法有這迭代加深算法避免廣度優先算法無目標的缺點,也有A*算法的方向性,內存消耗也比A*小,缺點是每一個點可能屢次重複地被搜索。實際效果是在大規模圖裏面性能不錯。

g)       fringe search算法:其是一種介於IDA*和A*之間的算法。其出發點在於A*算法的搜索對內存消耗較高,而IDA*算法有兩個重要缺陷:一是頂點會被重複搜索;二是每一次Dmax增長以後全部以前的計算並不能對以後的計算起做用。fringe search算法的基本思想是引入兩個隊列now和later用於存儲搜索樹的頂點,now用於當前此次循環,later用於下一次循環,其餘部分與IDA*算法類似。

h)      Simplified Memory Bounded A*(SMA* )這是對A*算法的一種內存優化算法。其與A*算法的不一樣在於其限定一個最大可用內存,若是可用內存在計算過程當中消耗殆盡,將f值最大的點從內存中刪去,但相關路徑的長度會被記錄,若是其餘搜索出來的路徑都不如這個數據,路徑會被重構。

i)         Any-angle path planning問題相關算法:這一類問題考慮的是傳統算法都在考慮從一個點(區域)到另外一個點(區域),但實際問題中會出現沒法抽象出點的狀況。我認爲交通網和社交網都不符合這類問題範疇,不予討論

d)      基於路標的算法:

                        i.              核心思想:基於路標的算法設計經過在每條邊引入一個路標(signposts)做爲指示牌,用來指引經由這條邊的最短路徑所能到達的節點的大體範圍,從而減小無謂的搜索。

                      ii.              實現策略:目前基於路標的技術主要有三類:幾何容器法,邊標示法和潛在目標策略。

  1. 幾何容器法:基本思想是對網絡中每一條邊預處理一個幾何容器C(e),容器中容納從節點i出發經由e的最短路徑所能到達的全部節點

將保存每條邊的這部分節點的問題轉化爲保存容器參量的問題。而在算法執行過程當中,只須要鬆弛哪些對應容易包含目標點的邊。這種思想因爲對內存消耗過大,目前在大規模網絡中少有應用。

  1. 邊標示法:此類算法核心思想在於大規模網絡既然難以直接尋路,那麼就先找到其對應的區域,再在子網絡去找。這和分層路由的思想極爲類似。首先將網絡分割成K個區域。而後針對每條邊相對於全部區域記錄是否能夠到達該區域。在搜索時只考慮哪些對目標節點t所在區域可達的邊。這種算法的性能註定是受K值的影響的。這裏的邊標示只須要在區域邊界點執行單源最短路徑計算便可。對於標記的改進主要有二,一是。。。。二是分層標記,我歸類於分層技術。
  2. 潛在目標策略:經過選取s和t之間最優但願通過的那些節點做爲潛在目標,將問題分治爲多段路之間的最短路問題。

a)       將搜索範圍限定在某些潛在子網絡中,而後經過分別進行尋找子網邊界點和子網內部搜索找到整個的最短路徑。

b)      提出一種預處理中轉節點的算法。這種算法應用於交通網,其核心思想在於,用戶移動過程當中,必定是儘量地在高速公路上移動,而沒有必要爲了縮短距離而離開高速公路,該算法將高速公路做爲重要節點,也就是所謂的中轉節點,記錄目標距離對應中轉節點的距離,而後記錄中轉節點間的距離,將最短路搜索問題轉化爲相似RIP協議路有項更新的問題。

四.         分層技術

a)       核心思想:這種技術的核心思想在於,在一開始的時候,並無必要考慮全部細節,先考慮關鍵點,而後再考慮關鍵點之間的細節,這樣能夠少考慮不少細節,而這些細節是沒有必要知道的。做爲類比,參考分層路由和OSPF協議,這三個應用場合都採用了這樣的思考方式,即網絡過於龐大複雜,而傳統算法都是基於相對小的網絡的,那麼就要把網絡變爲傳統算法效率很高的小網絡。大網絡問題到小網絡問題的映射必然考慮把網絡分割成不少子網,而後先將子網做爲節點考慮最短路問題,再在子網內部考慮搜索最短路便可。

b)      實現策略:主要分兩種策略,第一種是針對交通網的,利用交通網自己所具備的分層特性,利用幹道和支路對網絡進行分層。這種策略應用面相對較窄,並且對網絡的識別和預處理複雜,甚至須要人工干預。第二種策略即人工對網絡進行分割構造分層結構,經過人工分割使各子網規模大體均等,並儘可能使得分割後的子網相互獨立。接下來列舉的並不是實際論文的完整手段,二是這些手段中的分層策略,由於分層技術自己只是爲了降解分割網絡,而後應用其餘技術。

                        i.              入口點策略:定義高級網絡(主幹道)的交 叉口爲入口點,此類策略最初的手段是從s在低一級網絡中找到最近入口點,而後在高一級網絡中尋找最短路。此類手段在準確度上可能存在很大的誤差。改進策略分爲兩類,一類是s和t隸屬的子網和高一級網絡合併爲一個網絡,從而避免最近入口點並不是最佳入口點的問題;第二類改進引入了前文剪枝策略中提到的虛擬鏈路技術,經過把s和t與本子網的入口點創建虛擬鏈路來將多層網絡變爲一層網絡進行傳統搜索。而後入口點策略自己的缺陷在於,頗有可能最短路並不須要去到入口點,而是純粹有非主幹道組成。針對這個問題有一些改進措施,但並不能完美解決這個問題,由於有的時候對道路網而設計的,但注意到任何網絡均可以利用道路網的等級特性來對網絡加深認識,仿照道路網的等級特性,在搜索的過程當中逐次增長層數。對每一個點進行兩階段處理。第一階段處理是求局部最短樹,而後求到出發點到樹最遠端的高速路,而後再從最遠點出發求下一階段的最短路。總體看來,每一階段都是局部的最短路,K次迭代求到的的局部最短路就是K-1次迭代獲得的最短樹的高級網絡。從這個實現從距離上說,不通過入口點會更短,但其消耗也許會更大。入口點策略最初是針上已經能夠看到,分層只是一種分解網絡的手段,甚至只是一種思想,就是化全局爲局部,只是這個局部如何實現分爲在開始分割仍是邊搜索邊分割。

                      ii.              分割分層策略:這種策略就是在預處理階段將網絡分割成多個獨立的、規模相近的子網,子網間經過少許邊相連。經常使用的分割技術有SPC、METIS、K-center-cluster以及社團識別技術等。基本思路都是在原網絡的上求到子網邊界點的路徑,而後在而後在高層網絡繼續搜索。具體實施手段有。其中值得一說的是提出的最大穿越比策略,該策略綜合了數據預處理,分層技術和剪枝技術,能夠說是近年來的最短路算法的典型形式。具體策略以下:使用BTD算法分割圖,該分割算法的基本思路是先將圖分割成不少小的塊,而後經過穿越比進行合併,約束圖的規模,而後將子網抽象成點造成高層網絡。使用HSP路由算法進行搜索,和前面在剪枝算法中提到的PCD算法的搜索算法是一致的,都依靠維持距離上界和距離下屆來約束搜索範圍。

五.         總結

首先考慮目前的最短路算法應用場合,若是是非實時要求應用場合,那麼基於堆的Dijkstra算法和基於Bellman-Ford的劃分算法還有A*算法都依然是行之有效的,由於對時間並無過高要求。若是是實時場合,好比導航,好比社會網絡匹配等,則須要考慮到網絡的複雜性和計算的實時性。爲知足這些要求,目前認爲,算法應該是兩階段的,第一階段,作數據預處理,爲實時搜索提供線索;第二階段纔是實時都搜索。

因爲網絡的複雜性,降解分割是必要的,手段主要是兩種,一種是利用交通網自己的分層特性或者仿照交通網的分層特性對網絡進行天然劃分,即入口策略中提到的算法,這種方法的效率很大程度上取決於局部最短路徑樹的構造,子網也不夠理想;另外一種是預處理分割方法,一般採用分割算法對圖進行分割,目前主流的分割算法有SPC、METIS、K-center-cluster 12 、BTD算法以及社團識別技術,這種手段的缺陷在於,圖分割算法可能是應用於平面圖的,但實際網絡很大多是三維的,因此如何分割仍待研究。其中BTD分割算法因爲其分割目的是最短路徑搜索,分割手段也是最短路徑樹,與其餘純粹的圖分割算法不同。

網絡龐大的結構使得算法必須儘可能避免去搜索那些沒必要要的路徑區域,所以目標引導技術廣泛應用於近年來的最短路算法。目標引導技術如今應用比較廣的有這麼幾種:A*類利用估計函數引導,Pohl L提出的勢函數用做計算估計函數效果最好;剪枝技術,主要有REACH剪枝,上下界剪枝,剪枝技術不但能夠很好的約束方向,還能夠精確控制搜索精度;路標技術,主要是幾何容器法和邊標示法,用空間換時間;基於潛在目標搜索,不必定是最優解,但速度快。

但目前的算法有一個廣泛的缺陷,即不多有能針對動態網絡做擴展的。網絡權值是可能隨時變的,基於靜態搜索的動態網絡擴展主要有這樣兩個思路:一是增量策略,即在網絡變化時,測算出哪些地方變化了,受影響的有哪些區域,而後判斷有沒有必要從新計算圖的信息;二是動態計算策略,即在最初行動時,並不知道最短路怎麼走,不斷計算前面該怎麼走,這樣能夠必定程度上規避網絡變化帶來的影響。以目前的最短路技術而言,面對動態網絡時,應該探索如何才能充分利用兩方面信息:一是預處理階段存儲的網絡信息;二是已經計算獲得的最短路徑信息。這裏D*算法類提出了一種思想,但目前針對動態網絡技術並不成熟,我認爲這也是當前最短路算法時而使得實際移動時間高過預計的緣由之一。

 

六.         參考文獻

[1]      基於四叉堆優先級隊列及逆鄰接表的改進型Dijkstra算法陸鋒 1999——Dijkstra改進

[2]      複雜網絡中最短路徑算法的研究及應用羅飛 2007——Dijkstra桶算法

[3]      交通網絡最短路徑標號算法的實現與效率分析_陳潔 2005

[4]      Dijkstra算法的優化策略研究_陳益富 2006——Dijkstra改進

[5]      改進的Dijkstra最短路徑算法及其應用研究_王樹西 2012——Dijkstra改進

[6]      關於最短路徑的SPFA快速算法_段凡丁 1994——SPFA

[7]      距離尋優中Dijkstra算法的優化_鮑培明 2001——Dijkstra改進

[8]      網絡最短路問題的改進算法_王曉東 2002——Dijkstra桶算法

[9]      固定序Bellman_Ford算法的一個改進_韓偉一 2014——固定序算法,先進先出算法

[10]  經典Bellman_Ford算法的改進及其實驗評估_韓偉一 2012——劃分算法

[11]  最短路徑算法加速技術研究綜述_宋青 2012

[12]  大規模圖上的最短路徑問題研究_張鍾 2014——ACL,ACT,路標算法

[13]  適合複雜網絡分析的最短路徑近似算法_唐晉韜 2011

[14]  基於懲罰因子的多約束剪枝QoS路由算法_趙季紅 2015

[15]  Bellman_Ford算法的改進研究_陳華容 2006

[16]  US7869946 2011

[17]  Highway Hierarchies Hasten Exact shortest Path Queries_Sanders Schultes——任意網絡構形成交通網(局部最小生成樹)策略

[18]  route planning in road networks_ Dominik Schultes——潛在目標策略

[19]  Partitioning graphs to speed up point-to-point shortest path computations_ Qing Song, and Xiaofan Wang——BTD+HSP算法

[20]  Bi-directional search[M], Pohl L, IBM TJ Watson Research Center, 1970——勢函數

[21]  Goal_directed_shortest_path_queries_using_Precomputed_Cluster_Distances——PCD算法

[22]  The Focused D* Algorithm for Real-Time Replanning _ Anthony Stentz——Focused D*

[23]  a tunable graph model for incorporating geographic spread in social graph models_ Rajesh Sharma and Anwitaman Datta

[24]  a heuristic improvement of the bellman-ford algorithm_ ANDREW V. GOLDBERG——拓撲序算法

[25]  topological routing in large-scale networks_ Jens Myrup Pedersen, Thomas Phillip Knudsen and Ole Brun Madsen——分層算法

[26]  fast replaning for navigation in unknown terrain_ Sven Koenig——D* lite

[27]  Optimal and Efficient Path Planning for Partially-Known Environments_ Anthony Stentz——Focused D*

[28]  An efficient path computation model for hierarchically structured topographical road maps_ Sungwon Jung——分層技術(邊界點鏈接高層網絡)+A*

[29]  Efficient routing on large road networks using hierarchical communities——雙向搜索,分層技術(社團識別技術),下降精度搜索,擴展到動態網絡

[30]  A two-phase shortest path algorithm for networks with node coordinates——A*結合剪枝技術(三角不等式)

[31]  Geometric containers for efficient shortest-path computation——幾何容器法

[32]  Level graphs and approximate shortest path algorithms——入口點分層算法

 

 

本人原創,轉載請寫明原地址

相關文章
相關標籤/搜索