A star算法

A star算法介绍

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

这里写图片描述

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

这里写图片描述

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*搜索算法
柳厶幺的回答

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值