路网最优路径算法之一启发式搜索
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的路径呢?假设继续扩大范围搜索