A星算法和 IDA星算法

本文详细介绍了A*算法和IDA*算法的原理,它们都是搜索算法的有效改进。A*算法通过结合广度优先搜索与估价函数实现更优解的查找,而IDA*则是迭代加深搜索与A*算法的结合,以时间和空间效率的平衡为特点。在15数码问题的测试中,IDA*在空间效率上远超其他算法,而A*与双向广搜在时间效率上表现接近。
摘要由CSDN通过智能技术生成

这两种算法是我在搜索中除了 DLX 所见过的最适合用于搜索的算法了。可以把 A * 看作广搜的进化,再把 IDAstar 看作 A * 的时间换空间形式。

首先讨论 A * 算法。其实我觉得他和广搜很相像,但是又有如下的要素:

1.估价函数 f = g + h,由两个部分组成: g 和 h,分别表示初始状态到当前状态的距离和当前状态到目标状态的估计距离。

2.每次扩展最优节点。即每次从所有已扩展的节点中选取估价函数值最小的节点先扩展。

3.估价函数中的 h <= h *,即估计距离一定要不大于最优距离。这是很关键的一点:这直接关系到 A * 算法是否同于 A 算法,还有所搜到的结果是否为最优解。

如何实现呢?首先,需要设计满足条件 1 和 3 的估价函数计算公式,并且 h 的值越大(在满足不大于 h * 时),搜索越快。在广搜中,可以把 h 函数视作 0,所以也可以说广搜就是最垃圾的 A * 算法。再者,为了满足条件 2,需要每次快速取出最优的节点扩展。毫无疑问堆是最合适的。

这样,A * 算法即:在广搜的基础上加上 h <= h * 的估价函数,然后将队列换成优先队列(堆)。

再来讨论 IDA *。首先我们需要知道什么是迭代加深深搜。

有的时候,一个局面可以搜索很多很多层,这样一般的深搜肯定会挂。怎么办呢?在某些限制了搜索深度的情况下,可以每次限值当前搜索的深度,然后对每一个深度下进行搜索。

听起来这是在浪费时间,几乎每次都要重复搜索原来搜过的状态。但是这样又有一个显而易见的好处:如果所需要的是最优解,那么就可以避免扩展完所有的状态(深搜),就可以得到最优解。 

那为什么不用广搜呢?显然,在某些搜索中,超过 20 层所需的空间就可以爆掉 512 M 了。而迭代加深深搜很好的用时间弥补了这种不足。所以说,他是介于广搜和深搜之间的一种算法。

那什么是 IDA * 呢?显然,就是加上和 A * 算法中的估价函数的迭代加深深搜。如何利用估价函数呢?显然就是估价函数的不超过当前所限制的深度。由于 h <= h *,所以结果最优绝对可以保证。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值