关于A*估价函数的总结
估价函数的优劣决定一个A*算法的好坏
360百科上是这样说的:
(https://baike.so.com/doc/6223470-6436780.html)
关于估价函数h(n)与实际距离d(n)的大小关系导致的搜索范围的不同,一些同学表示不理解
这里给出一个不是很严谨的证明:
首先,d(n)+g(n)即为当前路径到目标状态的总距离,
而我们在估价后,认为这条路径的总距离为h(n)+g(n)
以第一种情况(h(n)<d(n))为例 八数码
在八数码中的估价中,我们发现一次操作最多使两个元素接近于目标状态,
所以把每个数字距离目标的状态的曼哈顿距离之和除以二,这样是一个最理想的距离,
也就是说,h(n)<d(n)。
而每次取出队首元素,向下扩展,我们可以想到,
随着深度的增大,该路径的g(n)+h(n)会越来越大,一直趋向g(n)+d(n)
所以当这个值比其他路径的估价大时,就不会再继续搜这条路径了
可以理解为,深度越大,一条路径的优势越小,从而搜到的范围比较大
为什么一定能搜出最优解:
最优解的g(n)+d(n)<非最优解的g(n)+d(n),而h(n)<d(n),
因此,不会存在一种情况,使最优解的g(n)+h(n)>非最优解的g(n)+d(n)
而随着深度的增大,每个路径g(n)+h(n)都是会趋向g(n)+d(n)的
在一个非最优解的路径中,随着深度增大,
在搜到目标之前,一定会在某一层出现都比最优解估价大的情况
而最终先搜到目标的,就是最优解。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 趁着过年的时候手搓了一个低代码框架
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现