一种最佳优先算法。用于搜索。

以路径代价(例如路径长度)为标准,从小到大扩展代价,找到最佳路径的算法。

其扩展过程可以看作是从起点位置开始,以波形式向外扩展,直到抵达终点。

ref: 《AIMA》

概述

  • 评价函数:以路径为评价,在路径一致的波中展开
    • 理解为广度优先搜索的特殊形式,广度为动作代价,Dijkstra 为路径代价
  • 后期目标测试:在扩展节点时测试是否为目标节点,而不是在生成节点时立即确认
    • 推迟目标测试的时间,才能保证返回最佳的路径,而不是非最佳路径

计算复杂度

  • C* 为搜索到最优解的代价(路径长度)
  • 为动作的下界

相比广度优先算法更复杂,因为要根据路径代价迭代

完备性

算法是完备的,而且一般认为代价为最优

动态规划 视角

ref: https://www.zhihu.com/question/22311234/answer/2281654855

其实Dijkstra算法有动态规划成分,但一般被认为是贪心策略的一种,有以下相同的性质:

  • 最优子结构:Dijkstra对于子路径是局部最优的
  • 无后效性:Dijkstra对于前后的状态是不用重复计算的。仅是对于路径代价的拓展。