启发式搜索:A*算法

  • 定义

        A*算法,(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。

  • 推理

        如果给定一个“目标状态”, 需要求出从初态到目标状态的最小代价,那么优先队列BFS的这个“优先策略”显然是不完善的。一个状态的当前代价最小,只能说明从起始状态到该状态的代价很小,而在未来的搜索中,从该状态到目标状态可能会花费很大的代价。另外一些状态虽然当前代价略大,但是未来到日标状态的代价可能会很小,于是从起始状态到目标状态的总代价反而更优。优先队列BFS会优先选择前者的分支,导致求出最优解的搜索量增大。

        为了提高搜索效率,我们可以对未来可能产生的代价进行预估。详细地讲,我们设计一一个 “估价函数”,以任意“状态”为输入,计算出从该状态到目标状态所需代价的估计值。在搜索中,仍然维护一个堆, 不断从堆中取出“当前代价+未来估价”最小的状态进行扩展。

        为了保证第一次从堆中取出目标状态时得到的就是最优解,我们设计的估价函数需要满足一个基本准则:
1. 设当前状态state到目标状态所需代价的估计值为f(state)。
2. 设在未来的搜索中,实际求出的从当前状态state到目标状态的最小代价为g(state)。
3. 对于任意的state,应该有f(state) ≤ g(tate)。
也就是说, 估价函数的估值不能大于未来实际代价 ,估价比实际代价更优。

        这种带有估价函数的优先队列BFS就称为A* 算法。只要保证对于任意状态state,都有f(state) <= g(state),A*算法就一定能在目标状态第一次从堆中被取出时得到最优解, 井且在搜索过程中每个状态只需要被扩展一次(之后再被取出就可以直接忽略), 估价f(state)越准确、越接近g(tare), A * 算法的效率就越高。如果估价始终为0,就等价于普通的优先队列BFS.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值