在嵌入式设备上做路径规划必须考虑到内存和效率的问题,当数据量(注:这里的数据量指的是所需处理的道路的总数)非常庞大,起点和终点距离非常远的时候,这点尤为重要。主要原因有两个:1、纯粹的最短路径算法对内存的消耗非常大,因为不管是Dijkstra还是A*,计算过程会有很多最终有效路径(注:有效路径是指从起点到终点所有的节点序列或是弧段序列的集合)以外的节点和弧段被访问到,而记录这些非有效节点和弧段需要大量的内存,内存不足会最终导致路径搜索失败。2、最短路径算法是从一个起点开始,大撒网式的向四周扩散,每次迭代产生当前最短的路径,至于那次迭代刚好是终点却无法预测,这样漫无目的的搜索必然会导致效率不高,搜索一条路径可能会花上分钟级别的时间(根据用户反馈,手机导航搜索一条路径的时机消耗在30秒以内是可以接受的,超过1分钟就会有投诉)。
如果路径规划只是在城市数据量规模内,则不必过于考虑以上两点,比如新加坡总共有5W条道路,马来西亚30W条左右道路,对于这样规模的数据量,只需要对最短路径算法做一定优化基本就可以满足用户需求。但是当处理泰国(220W条道路),中国(500W以上)这样大的数据量中做远距离路径规划的时候,除了对算法本身优化还需要对数据做适当的预处理,通过控制算法的搜索空间来限制内存的使用和提高搜索的效率。这里我介绍一种可行的方案。