专题·启发式搜搜(A*算法)【including A* & IDA*

本文深入探讨启发式搜索原理,包括A*算法和迭代加深启发式搜索IDA*,讲解估价函数设计及其在八数码问题和K短路问题中的应用。

初见安~这里是搜索之启发式搜索专题:)【其实也没什么好写的QAQ

启发式搜索 A*

什么是启发式搜索——其实可以说是在BFS 或者 DFS时的一个优化操作,在搜索的时候通过一个估价函数来估计当前状态对于答案的价值,如果估出来是一定不如最优解的,那么当前状态我们就可以直接舍弃。

就比如求K短路的时候,就可以用A*算法估价这个点到终点的距离,加上实际距离用于优先队列排序,让估价后更优的策略靠前。这种情况下我们的估价函数就是先逆向求一边从终点出发到其他所有点的距离。

很明显,估价函数就是这个算法的难点。估价函数写的如何,决定了你的代码的正确率和运行时间如何。

可能这么说不是很容易理解,我们接往下看。

迭代加深启发式搜索 IDA*

什么是迭代加深?往往是在涉及到状态的时候应用较多。就比如八数码问题,我们可以枚举移动次数,然后A*搜索看看能不能在枚举的次数以内得到答案。这种情况下,我们估价函数的意义就是:当前步数+估价步数>枚举答案,那么这个状态就不必推广下去了

其实现效率:BFS < A* < IDA*。

如果这样都还不能很明白的话,就可以做点例题体会一下。

洛谷P1379 八数码难题

洛谷P2324 骑士精神

估价函数的形式很多,有的时候是具体数值,有的时候就真的就是一种估计。上面两种就是单纯的估计,还有求曼哈顿路径等等的估价方式。

所以其实这种搜索真没什么好说的……QAQ就相当于是加一个估价函数让你能更快找到你的目标。

至于估价函数怎么写,这个……就靠你自己去刷题历练啦~

经典应用:

1.类似于八数码

2.K短路

迎评:)
——End——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值