小结:A* & IDA* & 迭代深搜
概要:
在dfs中,如果答案的深度很小但是却很宽,而且bfs还不一定好做的情况下,我们就综合bfs的优点,结合dfs的思想,进行有限制的dfs。在这里A*、IDA*和迭代深搜都是对dfs的优化,因此放到一块小结。
A*的概念主意在于估计函数,f(n)=g(n)+h(n),f(n)是估计函数,g(n)是n节点的当前代价,h(n)是n节点的估计代价;而实际中,存在最优的估计函数f'(n)=g'(n)+h'(n),那么显然我们在A*的估计中,h(n)<=h'(n),否则你将搜不到最优解;(g(n)>=g'(n)我还不怎么清楚为什么啊,大多数情况是g(n)=g'(n),这个可以不用管吧。。),所以我们可以根据题目所给约束来计算估计代价,当然越逼近h'(n)的估计代价效率越高(显然bfs是h(n)=0的情况)(有关A*概念介绍在这篇博文里【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索))
裸的A*是往下搜的话更新答案(剪掉估计函数>当前最优解的枝),但是深度还是可能很大,所以我们考虑迭代深搜。
迭代深搜又是一种思想,即限制搜索深度,这样A*与迭代深搜结合起来就成为了IDA*,效率大大提高。
技巧与注意:
技巧只有一个,就是尽量时h(n)逼近h'(n),那么我们就要考虑如何逼近。
例如【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)这题就是考虑到了“当前没有到达目标位置的点的数量”,用这个作为h(n),而这是显然正确的,即h(n)<=h'(n),因为无论如何不在目标位置上的点总是要至少移动一步才能到达目标。(拓展:假设没有空格,而是可以直接换,那么我们可以/2就行了。这也是显然的吧)
然后还有一个应用是求k短路,其中用起点到当前点的维护信息作为g(n),当前点到终点的维护信息作为h(n),这个估计代价也是显然的吧。然后每次将估价函数最小的先弹出来做bfs。当bfs的当前节点为终点时,那么ans+=1,当ans==k时就能结束bfs了,此时的g(n)就是k短路,例题【POJ】2449 Remmarguts' Date(k短路)。(在这里如果起点终点都相等,那么在bfs前要处理k为++k,因为起点和终点的距离为0了,显然会在第一次bfs就累计了答案,而这个答案是我们所不需要的)
小结:A* & IDA* & 迭代深搜的更多相关文章
- bzoj 1085骑士精神 迭代深搜
题目传送门 题目大意:给出一幅棋盘,问能否复原,中文题面,不做解释. 思路:第一次写迭代深搜的题目,这道题还是挺经典的.这道题的状态很明显的每多搜一层就是多八倍,非常的多,而且又是t组输入,所以必定有 ...
- uva12558 Egyptian Fractions (HARD version)(迭代深搜)
Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ...
- [vijos1159&洛谷1494]岳麓山上打水<迭代深搜>
题目链接:https://vijos.org/p/1159 https://www.luogu.org/problem/show?pid=1494 这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板 ...
- [codevs1049]棋盘染色<迭代深搜>
题目链接:http://codevs.cn/problem/1049/ 昨天的测试题里没有打出那可爱的迭代深搜,所以今天就来练一练. 这道题其实我看着有点懵,拿着题我就这状态↓ 然后我偷偷瞄了一眼hz ...
- [noip模拟]小猫爬山<迭代深搜>
[题目描述]: Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Freda和rai ...
- 【wikioi】1049 棋盘染色(迭代深搜)
http://www.wikioi.com/problem/1049/ 这题我之前写没想到迭代加深,看了题解,然后学习了这种搜索(之前我写的某题也用过,,但是不懂专业名词 囧.) 迭代加深搜索就是限制 ...
- 【BZOJ3041】水叮当的舞步 迭代深搜IDA*
[BZOJ3041]水叮当的舞步 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变.为了讨好她的偶像虹猫,水叮当决定在地毯上跳 ...
- POJ 1691 Painting A Board(迭代深搜)
题目链接 调了一上午,单步的效率太低了,特别是在有递归的情况下...下午来了,输出调试了下,就发现bug了,各种混乱啊. 比较高兴的事,1Y了.本来还准备用edge1优化一下的,结果完全没用到.. # ...
- 【Uva 12558】 Egyptian Fractions (HARD version) (迭代加深搜,IDA*)
IDA* 就是iterative deepening(迭代深搜)+A*(启发式搜索) 启发式搜索就是设计估价函数进行的搜索(可以减很多枝哦~) 这题... 理论上可以回溯,但是解答树非常恐怖,深度没有 ...
随机推荐
- VB 获取默认打印机的状态
如何获取默认打印机的状态,包括缺纸.卡纸.无连接等状态,还有将某文件打印后,如何得知打印成功? Option ExplicitDeclare Function MapPhysToLin Lib &qu ...
- Nginx.conf简介
vim /etc/nginx/nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log lo ...
- vue 表单 验证 async-validator
1.使用插件async-validator async-validator 地址:https://github.com/yiminghe/async-validator 2.示例(vue+elemen ...
- js Object.defineProperty 使用
语法 Object.defineProperty(obj, prop, descriptor) 参数说明: obj:必需.目标对象 prop:必需.需定义或修改的属性的名字descriptor:必需. ...
- 15-spring学习-集合表达式
spring认为,数组和List集合是等价的. 要想操作list集合,利用“{内容,内容...}”的形式就可以完成了(类似数组). package com.Spring.ELDemo; import ...
- spring mvc 返回json的配置
转载自:http://my.oschina.net/haopeng/blog/324934 springMVC-servlet.xml 配置 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- LaTeX 中文段首空格问题
一般用 “\\”或者回车可以使得下一段段首空两格,但是对于第一段就不行了. 解决办法: 加一个\usepackage{indentfirst}就可以
- Redis全方位讲解--哨兵模式(Sentinel模式)(转载)
前言 当按照上一篇<redis主从复制>部署好之后,我们会想,一旦redis的master出现了宕机,并且我们并没有及时发现,这时候就可能会出现数据丢失或程序无法运行.此时,redis的哨 ...
- VMware Workstation unrecoverable error: (vmx)虚拟机挂起后无法启动问题
为了方便,虚拟机都是采用挂起状态,今天在启动虚拟机的时候出现如下提示错误: VMware Workstation unrecoverable error: (vmx)Exception 0xc0000 ...
- MFC总结之CListCtrl用法及技巧(二)
续第一篇:MFC总结之CListCtrl用法及技巧(一) http://blog.csdn.net/zwgdft/article/details/7560592 本篇重点介绍:禁止拖动表头.让第一列居 ...