路網最優路徑算法之一啟發式搜索


1 Dijkstra描述與分析

    1.1 算法描述
      Dijkstra最短路徑算法,具體地說,應該是一種單點到多點(one to many)的最短路徑搜索算法,因為它從起點開始搜索時,總是優先搜索和展開當前離起點路徑最短的節點,直至搜索到目標點時結束搜索。
      有人說,Dijkstra算法是一種貪心的算法,因為每次搜到當前節點時,總是任性地判定“當前看來的局部最優解(在當前已搜索空間上的最短路徑path(s,....,t))是全局最優解(全圖空間上的最短路徑path(s,.....t))”。

      我們知道,圖的遍歷分為深度優先搜索和廣度優先搜索兩種。其實假設任意相鄰兩個節點之間的阻抗均為單位1時(方便理解),Dijkstra最短路徑算法則演變成了寬度優先搜索算法:從起始點向四周層層展開,最終遇到終點t時終止搜索。

    1.2 算法證明

      無論從貪心算法還是寬度優先遍歷算法的角度理解它,Dijkstra算法算是一種盲目的搜索算法,所以我們還是會懷疑它搜索結果的正確性。有些事情如果很難證明它是正確的,那么我們試圖揭穿它是錯誤的--反證法。
      Dijkstra搜索過程:從當前起始點s開始搜索,搜着搜着...,終於在當前搜索擴展空間上遇到目標點t時,結束搜索,求出最短路徑為path(s,...,d)。那么如果繼續擴大范圍進行搜索時,有沒可能找到更短的由s至目標點t的路徑呢?假設繼續擴大范圍搜索,經過了節點u然后遇到了目標點t,存在着候選路徑path(s,....u..,t)<path(s,...,d)。path(s,....u..,t) = path(s,..,u)+path(u,..,t)。又已知搜索規則是"優先搜索和展開當前離起點路徑最短的節點",所以path(s,..,u)>path(s,...,d),很明顯得出path(u,..,t)小於0的結論,而前提條件是任意兩節點間沒有負權值的,所以假設不成立。這也是為什么Dijkstra算法得在沒有負權值的條件下work的原因。
      自Dijkstra算法創造出來至今的50多年時間里,雖然相繼出現了些加速優化的算法,但均是以dijkstra算法為基礎的,可以說dijkstra是網絡最優路徑算法的開山之作,當然Dijkstra其人的偉大之作不在此多表。

2 Dijkstra搜索空間存在的問題
    假設每個節點表示一個城市,起始點S為武漢,目標點T為北京的搜索節點展開過程如下:

   

      其中節點的標號表示從起始點節點開始搜索依次展開的序號。按Dijkstra“離起始點路徑最短的當前點為優先搜索展開准則”,先搜索到附近的岳陽、合肥、南昌、南京等城市,然后搜索到了長沙、鄭州等城市,最后一定是在搜索到目的地北京之前,先搜索到了廣州節點,由於武漢-廣州較武漢-北京稍短些。心理認知上告訴我們,岳陽、長沙等方向明顯是會和目標點方向相悖的搜索節點,所以在這個搜索過程中,算法遍歷了很多“冤枉徒勞”的路。
     正所謂“方向錯了,再努力也沒用”。那么有什么策略可以減少這種“南轅北轍”的現象呢,或者說直覺上優先加速搜索方向更靠譜的節點?

3 A*算法

      自1959年,前圖靈獎獲得者發明Dijkstra算法后。終於在近10年后的1968年,由斯坦福研究所的Nilsson擴展了其算法,提出了著名的A*算法。而A*算法正是以“優先搜索直覺上方向靠譜的節點”為策略來減少搜索空間達到加速搜索目標點的目的,其搜索空間如下:    


     
Dijkstra算法是以起始點為中心,離起始點路徑最短的當前點為優先准則,層層向外進行展開的搜索策略。 而A*算法在Dijkstra基礎上進行了擴展,同樣以起始點為中心,但是以離起始點和目標點路徑的近似之和為最短的當前點(估價函數之一)為優先准則,層層向外進行展開的搜索策略。
     從圖搜索算法的角度上思考:Dijkstra算法更近似寬度優先搜索算法,而A*算法更近似深度優先搜索算法。回憶初中課本關於圓與橢圓的定義,不難近似描述出Dijkstra算法與A*算法的搜索空間如下:

   
                          
     搜索耗時是與搜索的空間范圍成正比的,所以兩者算法的耗時對比:也即是兩焦點為R的橢圓與半徑為R的面積近似比。

 

    參考

      http://en.wikipedia.org/wiki/A*_search_algorithm


免責聲明!

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



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