由A*解决八数码问题像想到的一点关于搜索算法的感悟

本文深入解析了A*算法的工作原理及其在不同场景中的应用。对比了两种A*算法的估价函数,一种采用曼哈顿距离,另一种则计算初始与终止状态间的偏差总和。此外,还介绍了搜索算法的基本步骤,并探讨了A*算法如何解决从一种状态转换到另一种状态的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于A*算法的内容请看这个包你看懂的教程(只要你有耐心): 点击打开链接

关于八数码问题请看:点击打开链接

其实,看完这个A*算法的教程,你肯定知道怎么用A*算法去解决路径是否存在,若存在最短路径是多少这类的问题。但是,遇到八数码问题时,估计还是觉得它跟A*算法没什么关系啊。(至少我这个死菜鸟是这样觉得的......)有这样的疑问,很可能是心中有以下几个问题:

1、第一个链接的A*算法跟第二个链接的A*算法的联系和区别到底在哪里呢?

2、搜索算法到底是怎样来解决问题的?

3、A*算法到底可以解决怎样的问题?


下面,我们来一一理清:

1、区别:第一个A*跟第二个A*的估价函数的不同,即第一个A*的估价函数用的是曼哈顿估值法,而且第二个A*的估价函数是每个点的初始态和终止态的偏移量之和

联系:寻找待扩展点的方式。都是按照“是否与当前节点相邻节点”这一条件来找待扩展点。

2、搜索算法就是通过在一个图(矩阵)中,1、从初始点开始,2、寻找到待扩展点,3、通过某些人为的约定来从待扩展点中选择下一个真正的扩展点(如A*中根据估价函数来选择扩展点,保证每次的扩展点都是估价函数最小的),最终得到到终点的一条路径。

3、A*算法解决的就是矩阵如何从一个状态转换到另外一个状态(前提是可以转换成功),无论这个“状态”是想第一个A*中的单个点的矩阵点的转换,还是八数码中的整个矩阵的所有点的转换。



PS:八数码问题还有一个特殊情况,就是开始的节点所在的位置刚好是目标节点的位置,如:

283 164 705

123 804 765

此时,终止循环的条件就是:while(当前节点所在的位置是终止点&&估价函数为0)


A*算法的启发性有小小贪心算法的味道!!

未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值