-
A搜索:总代价 f(n) = g(n) + h(n),其中g(n)为从初始状态到达该状态的代价(这里一个状态也就是A算法里常说的一个节点),h(n)为从当前状态到目标状态的预估代价。因此,该算法的思路就是,每次寻找总代价f(n)最小的点进行扩展,直到找到终点。A*的具体过程可参考这篇博客,可参考这篇博客:https://blog.csdn.net/hitwhylz/article/details/23089415
-
贪心搜索:代价f(n) = h(n),每次只考虑(可到达的)离目标节点最近的点进行扩展
-
IDS深度迭代搜索:在有界的深度优先搜索的基础上迭代的设置边界,即先考虑一层的DFS,若找不到目标则找两层的DFS,一直迭代下去直到找到目标节点。所以这种方法也是一定能找到界的,只是时间消耗会很多。
- Dilkstra算法只考虑当点代价最小的点(f = g),所以需要扩展的节点是最多的,耗时是最长的,但是这种方法一定能找到最优解(也即是路径最短的解)
- 而贪心每次只考虑离目标节点最近的点(f = h),所以很容易很快就能找到目标节点,但是这种方法找到的解往往不是最优的(也就是找到的路径往往不是最短的)
- 那么,A就是结合了二者的优点 (f = g + h),既考虑当前的代价,有考虑离目标点的预估代价,既保证了找到的解是最优的,又使得所搜速度相对于Dijkstra变快了,因此,A算法是这几种方法中效率最高的完备(能找到最优解)的方法