目录
如今,GPS导航为我们的交通出行带来了极大的便利,尤其是对于MC君这种路痴而言,出行已经依赖了地图导航。在地图导航软件中,我们最常用到的功能就是搜寻最短路程的路线或者最短时间的路线,我们知道,城市路网是错综复杂的,如果要遍历从出发地到终点的所有路线,计算量是巨大的,耗时也很长,那导航系统究竟是如何做到在最短的时间内搜寻到最短路线呢?吴军老师在《数学之美》一书中提到了一种常用的优化方法:动态规划。
一、动态规划
动态规划(Dynamic Programming)的核心思想就是把一个大的问题拆解成一个个小的子问题,通过求解这些子问题,层层优化,最终得到大问题的最优解。动态规划是一种有效求解最短路径问题的优化方法,我们举个具体的例子看看它是如何操作的吧!下图是一个简化版的城市路网,假如我现在要从A城出发,现在求从A城到E城的最短路线。
看着错综复杂的路线图真的头都大了!但我们可以根据每个城市的连接关系作出一个简单的有向图,每个城市就是一个节点,每一条路就是一条弧,如下图所示,图中弧的权重对应地图上的距离(为了避免标注的混乱,只标注了部分的距离)。通过绘制有向图,如此,就把A到E的路线分成了三个阶段,分别是A→Bi(i=1,2,3,4)、Bi→Cj(j=1,2,3)和Cj→Dk(k=1,2)。