路徑規划常見算法小結


 

Dijkstra算法

Dijkstra 算法是一種用於計算帶權有向圖中單源最短路徑(SSSP:Single-Source Shortest Path)的算法。其解決的問題是:給定圖$G$和源頂點$v$,找到從$v$至圖中所有頂點的最短路徑。

Dijkstra 算法采用貪心算法(Greedy Algorithm)范式進行設計。在最短路徑問題中,對於帶權有向或無向圖 $G = (V, E)$,Dijkstra 算法的初始實現版本未使用最小優先隊列實現,其時間復雜度為$O(V^2)$。

基於 Fibonacci heap 的最小優先隊列實現版本,其時間復雜度為$O(E + VlogV)$。缺點是不能處理含負權值邊的圖。

 

Bellman-Ford 算法

Bellman–Ford 算法是求解單源最短路徑問題的另外一種算法。它的原理是對圖進行$V-1$次松弛操作,得到所有可能的最短路徑。其優於Dijkstra算法的方面是邊的權值可以為負數、實現簡單,缺點是時間復雜度過高,高達$O(V*E)$。

 

Johnson算法

Johnson算法主要用於求稀疏圖上的所有節點對的最短路徑。其主體思想是利用重新賦予權值的方法把一個原問題帶負權的圖轉化為權值非負的圖。然后再對每個節點使用一次Dijkstra算法以求出所有節點對的最短路徑。時間復雜度為$O(VE + V^2logV)$。

 

Floyd-Warshall算法

Floyd-Warshall算法中文亦稱弗洛伊德算法,是解決任意兩點間的最短路徑的一種算法,可以正確處理有向圖或負權(但不可存在負權回路)的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。

Floyd-Warshall算法采用了動態規划思想,時間復雜度為$O(N^3)$,空間復雜度為$O(N^2)$。

對於一個完全連通圖,無向圖一共有$(V*V-1)/2$條邊,有向圖有$(V*V-1)$條邊,由於$(V*V-1) \approx V^2$,所以有$O(VE + V^2logV) < O(V^3)$,理論上Floyd的效率與Johnson相當。

但是實現上來看,Johnson用了斐波那契堆優化后的Dijkstra算法實現較繁瑣,Floyd實現則更簡單)。由於實際中Floyd的內循環的操作成本更低,使其實際運行時間效率也比Johnson算法明顯高。

但是這一類算法由於仍舊有着較高的時間復雜度,因此實際中主要使用下面的CRP方法。(早期高德地圖主要使用A*搜索算法,現在似乎已經全面使用CRP算法)

 

SPFA算法
SPFA(Shortest Path Faster Algorithm)(隊列優化)算法是求單源最短路徑的一種算法,它還有一個重要的功能是判負環(在差分約束系統中會得以體現),在Bellman-ford算法的基礎上加上一個隊列優化,減少了冗余的松弛操作,是一種高效的最短路算法。

 

A*搜索算法

A*搜索算法,俗稱A星算法。這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的算法。常用於游戲中的NPC的移動計算,或網絡游戲的BOT的移動計算上。

該算法綜合了Best-First Search和Dijkstra算法的優點:在進行啟發式搜索提高算法效率的同時,可以保證找到一條最優路徑(基於評估函數)。

在此算法中,如果以$g(n)$表示從起點到任意頂點n的實際距離, $h(n)$表示任意頂點$n$到目標頂點的估算距離(根據所采用的評估函數的不同而變化),那么A*算法的估算函數為:$f(n)=g(n)+h(n)$。這個公式遵循以下特性:

  • 如果$g(n)$為0,即只計算任意頂點$ n$到目標的評估函數$h(n)$,而不計算起點到頂點$n$的距離,則算法轉化為使用貪心策略的Best-First Search,速度最快,但可能得不出最優解;
  • 如果$h(n)$不高於實際到目標頂點的距離,則一定可以求出最優解,而且$ h(n)$越小,需要計算的節點越多,算法效率越低,常見的評估函數有——歐幾里得距離、曼哈頓距離、切比雪夫距離;
  • 如果$ h(n)$為0,即只需求出起點到任意頂點$n$的最短路徑$ g(n)$,而不計算任何評估函數$h(n)$,則轉化為單源最短路徑問題,即Dijkstra算法,此時需要計算最多的定點。

 

Customizable Route Planning可定制最短路徑

由微軟硅谷研究院三名工程師於2013年提出,目前已經運用到Bing地圖的公路導航中。

https://www.microsoft.com/en-us/research/publication/customizable-route-planning/

http://download.csdn.net/download/yihaomoqu/6376051


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM