A star算法

A star算法介绍

我们在解空间搜索问题的可行解或者最优解时常用宽度优先搜索(BFS)或者深度优先搜索(DFS),但是有时候会扩展出很多无用节点,搜索时间较长,而A*算法则是选择当前估计成本最低的节点进行扩展,图示如下:

A star算法_第1张图片

g(n)为从起始节点到节点n的成本,h(n)为从节点n到目标点的估计成本
总的成本估计f(n) = g(n) + h(n)
整题实现大概以下几个步骤:
1. 初始化: 将开始节点放到open表中并计算估计成本,close表置空
2. 如果open表为空则算法失败,否则取出open表中估计成本最低的节点n, 将节点n放入close表
3. 如果n是目标节点,算法终止或者继续寻找其他可行解,否则扩展节点n的子节点:
对于每个子节点:
\\\\如果它在close中就忽略它,否则:
\\\\\\\如果它也不在open表中,把它们加入open表中并计算估计成本,并且把当前节点n设置为它们的父亲
\\\\\\\如果它在open表中,重新计算它的估计成本
4. 转到2

Admissible heuristic

A star with tree能找到最优解的充分条件:
1. 搜索树上存在着从起始点到目标点的最优路径
2. 问题域是有限的
3. 所有结点的子结点的成本>0
4. h(n) =< h*(n) (h*(n)为从节点n到目标点的实际成本)

1 2 3易满足,第4条中这样的启发函数被称为Admissible heuristic
eg. 令h(n)===0,A*搜索退化为宽度优先搜索(BFS),不估计成本,肯定能找到最优解

Consistent heuristi

A star算法_第2张图片

N是开始节点,绿色的是目标节点,h(N)则是从N到目标节点的启发函数,N’为任意不同于N的节点
A star with tree能找到最优解的充分条件:
1. 搜索树上存在着从起始点到目标点的最优路径
2. 问题域是有限的
3. 所有结点的子结点的成本>0
4. h(N’) + c(N, N’) < h(N)
这样的启发函数被称为Consistent heuristic,只有满足了这个才能保证A*算法在图搜索中能找到最优解。

While all consistent heuristics are admissible, not all admissible heuristics are consistent.

总结

A star算法的特点(考虑g(x)+h(x),注意树搜索满足Admissible heuristic,图搜索满足Consistent heuristic时)
1. 完备性:肯定能找到最优解
2. 最优性:找到的解花费最小
3. 快:扩展更少的节点

UCS(代价一致搜索,只考虑g(x))
1. 完备性:肯定能找到最优解
2. 最优性:找到的解花费最小
3. 比A*慢一些
广度优先搜索是代价一致搜索的特例

贪婪搜索(启发式搜索,但只考虑h(x))
1. 不完备性:不保证能找到最优解
深度优先搜索是贪婪搜索的特例


参考:
A*搜索算法
柳厶幺的回答

你可能感兴趣的:(算法)