基于移动设备的路径规划的思考

一、算法

 

      在GPS导航应用中,路径规划是个最基本也是最重要的功能。常用的最短路径算法是迪杰斯特拉(Dijkstra)算法,以及基于该算法的一些改进算法,比如引入Buckets的迪杰斯特拉算法,和引入Heap的迪杰斯特拉算法,这些算法在不同的应用环境下对Dijkstra算法有相应的效率的提升,还有Graph Growth,Topological Ordering,启发式搜索(A*)等算法。在此不做一一列举,有兴趣的可以参考文章后面的参考文献。  

      Dijkstra算法是按路径长度递增次序产生最短路径的算法,借助一个辅助向量空间记录源点到其余各顶点的最短距离,个人认为该算法思路很奇妙,算法最终肯定可以求解出一条最短路径。而A*因为引进了启发函数,启发函数的设计直接决定了搜索出来的最短路径,以及是否可以搜索到最短路径,A*算法效率相对于Dijkstra算法有一些提高。但是在实际道路网络路径导航中用A*算法,很多情况下都无法找到最短路径(当然这和启发函数的设计有很大关系),而且,当起始点和终点之间有一个湖泊的话,用A*算法算出来的最终结果可能会是兜圈子的一条“最短路径”,这无疑是一条无法令人满意的路径。因此个人认为用Dijkstra算法算出来的路径才能保证正确。      

      然而实际道路网络有很多的限制,比如U-turn, one way, no left turn等。用Dijkstra算法的时候,每确定了一个顶点以后即加入S集合,这意味着加入S集合的顶点无法被重新访问,那么此时问题就出来了,明明真正的最短路径是这个顶点处做个U-turn,而因为这个顶点已经加入S集合而导致无法二次访问,最后算出来的结果却还是绕了个圈儿。国外有学者做了研究,基于以顶点方式给出的道路网络的U-turn问题的解决。还有另外一种方法就是以弧段的方式给出道路网络,每个弧段都有一个start和end,这样通过记录这条弧段start和end的访问状态就可以有效解决U-turn问题。

 

二、内存

 

      路径规划需要的内存是相当可观的,在手机上做路径,城市或是国家小的话不会凸显内存的问题。当国家大,路径多的时候,内存的问题就会凸显了,其实Dijkstra算法对内存需求过大。但是目前没有什么好的方法去解决,可以做的就是对数据做预处理,想法设法减少潜在的路径数目,这样不但可以节约内存还可以一定程度提高算法的效率。

 

 

参考文献:

1.Shortest paths algorithms: Theory and experimental evaluation. Boris V. Cherkassky,Andrew V.Goldberg,

  Tomasz Radzik. August3, 1993  

2.Implementations of Dijkstra's Algorithm Based on Muti-Level Buckets. Andrew V.Goldberg, Craig

  Silverstein, November 1995.  

3.Three shortest path algorithms on real road networks:Data Structures and Procedures, F. Benjamin Zhan 

4.An Experimental Study of a Parallel Shortest Path Algorithm for Solving Large-Scale Graph

  Instances,Kamesh Madduri David A. Bader Jonathan W.Berry? Joseph R. Crobak  

5.基于城市道路网的最短路径分析解决方案, 刘云翔 陈 荦 李 军 陈宏盛

6.智能交通中的高效最短路径搜索算法, 叶 青。陈闳中

 

你可能感兴趣的:(Algorithm,算法,网络,Graph,Path,parallel)