【DayDayUp】【算法_搜索_A* 和 IDA*】

【坚持不能偷懒】

【A*——A Star算法(启发式搜索)】

记起点为 Start 终点为 End

f(n) = g(n) + h(n)

f(n)—— 经由状态 n 到 E 的【预计代价】

g(n)—— S 到 n 的【实际代价】

h(n)—— n 到 E 的 【预计代价】 —— 预计代价自行使用函数

搜索方法:

根据节点的 f(n)

每次选中 f(n) 最小的点加入搜索

搜索到End即可找到最短路

————————————————————

我在想,这样的估计能不能确保最优

百度了没有发现比较肯定的答案

百度百科上有这样的——

  1. 如果h(n)<= d(n)到目标状态的实际距离,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。
  2. 如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
  3. 如果 h(n)>d(n),搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。

对于1——h(n)<=d(n) 必然最优(以网格图搜索最短路为例)

假设实际最优解为 Ans

如果 f(p) = g(p) + h(p) 是一个非最优解

且 p 的下一个状态就是 End

那么 他的最后一步,因为 h(p)<=d(p)

且最后一步 d(p) 必然为 1

又h(p)>=1 所以 h(p) ==1

有f(p) = g(p) + h(p) = g(p) + d(p) > Ans



如果存在一个事实上的更优解的中间状态f(q)

f(q) = g(q) + h(q) 根据 h(n)<=d(n)

所以 f(q) <= g(q) + d(q) 即 f(q) <= Ans

那么——必然有 f(p) > f(q)


所以任意的f(p)不会在f(q) 之前进入搜索队列

所以这样的A* 能跑出最优解


【IDA*——基于迭代加深的A*算法】

在A*的基础上加入一个【深度的控制】

限制一个深度,不考虑深度外的搜索

如果在深度范围内没有得出结果

再把深度扩大,直到得出结果


可以把一般的搜索题,用A*或者IDA*来练习。

相关参考

堪称最好的A*算法

http://blog.csdn.net/b2b160/article/details/4057781

IDA*

http://blog.csdn.net/urecvbnkuhbh_54245df/article/details/5856756

八数码的八境界

http://blog.csdn.net/rachelsg/article/details/52717693?locationNum=10&fps=1





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值