关于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)的
在一个非最优解的路径中,随着深度增大,
在搜到目标之前,一定会在某一层出现都比最优解估价大的情况
而最终先搜到目标的,就是最优解。
关于A*估价函数的总结的更多相关文章
- BZOJ 2850: 巧克力王国 KDtree + 估价函数
Code: #include<bits/stdc++.h> #define maxn 100000 #define inf 1000000008 #define mid ((l+r)> ...
- BZOJ 4520: [Cqoi2016]K远点对 KDtree + 估价函数 + 堆
Code: #include<bits/stdc++.h> #define ll long long #define maxn 200000 #define inf 10000000000 ...
- BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000 using namespace std; ...
- ACM模板(持续补完)
1.KMP #include<cstring> #include<algorithm> #include<cstdio> using namespace std; ...
- KD-tree(2维)
用于动态插入以及求某点的最近点的距离(BZOJ2648,BZOJ2716) #include <cstdio> #include <cmath> #include <al ...
- A*算法
A*在游戏设计中有它很典型的用法,是人工智能在游戏中的代表. A*算法在人工智能中是一种典型的启发式搜索算法,为了说清楚 A*算法,我看还是先说说何谓启发式算法. 一.何谓启发式搜索算法: 在说它之前 ...
- 【bzoj1941】 Sdoi2010—Hide and Seek
http://www.lydsy.com/JudgeOnline/problem.php?id=1941 (题目链接) 题意 给出n个二维平面上的点,求一点使到最远点的距离-最近点的距离最小. Sol ...
- 【bzoj2648】 SJY摆棋子
http://www.lydsy.com/JudgeOnline/problem.php?id=2648 (题目链接) 题意 动态维护二维平面上的点的插入以及最邻近域搜索. Solution KDtr ...
- 人工智能 启发式算法(A,A*)
启发式算法区别于盲目搜索算法,是搜索策略的一种.主要特点是 可以利用问题自身的一些特征信息(启发式信息)来指导搜索的过程,从而可以缩小搜索范围,提高搜索效率. 实际上,启发式算法也代表了"大 ...
随机推荐
- temp脚本
!/bin/bash source ${HOME_DIR}/script/ideploy_dm.inc source ${HOME_DIR}/script/comm_lib home_dir=$(cd ...
- innosetup的静默安装与卸载
静默安装,就是减少程序与用户的交互,一站式的安装过程(一气呵成) 1. 静默安装参数 innosetup的静默安装是通过参数来控制的 1.1. /silent ...
- 深入学习keepalived之预备工作--线程
1. 线程的定义 1.1 线程定义在scheduler.h文件中,其定义如下所示 /* Thread itself. */ typedef struct _thread { unsigned long ...
- centos 6.5搭建LNMP环境
1:查看环境: 1 2 [root@10-4-14-168 html]# cat /etc/redhat-release CentOS release 6.5 (Final) 2:关掉防火墙 1 [r ...
- [转] 微信小程序 页面跳转 传递参数
本文转自:http://blog.csdn.net/qq_31383345/article/details/52795212 微信小程序的页面跳转,页面之间传递参数笔记. CSDN微信小程序开发专栏, ...
- html5可拖动的进度条
总结:拖动显示进度的进度条 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 2.C#编程语言
C#(sharp):是一种编程语言,可以开发基于.net平台的应用. java即是一种平台,也是一名语言. 在.net平台当中,C#是主流语言.C#语言开发的应用不能脱离.net环境而独立运行 ...
- vue+rest-framework前后端分离整合
一.vue部分 二.django路由配置 (1)项目urls.py修改如下: from django.conf.urls import url, include urlpatterns = [ # p ...
- checkbox中把选项文字与小圆圈关联上
跳舞 唱歌 阅读 睡觉 <form><input id="1" type="checkbox" name="hobbies" ...
- 【起航计划 032】2015 起航计划 Android APIDemo的魔鬼步伐 31 App->Search->Invoke Search 搜索功能 Search Dialog SearchView SearchRecentSuggestions
Search (搜索)是Android平台的一个核心功能之一,用户可以在手机搜索在线的或是本地的信息.Android平台为所有需要提供搜索或是查询功能的应用提 供了一个统一的Search Framew ...