【笔记】 搜索
来源:互联网 发布:java 开源oa系统 编辑:程序博客网 时间:2024/06/08 01:09
搜索包括dfs,bfs,迭代加深,启发式搜索;
一:常见搜索问题
排列,组合,路径
二:DFS
一搜搜到底;
优点:占空间小,很快找到一个解;
缺点:找的的解不一定是最优解,有超时和爆栈风险;
技巧:打暴力,卡时骗分;
例题:全排列,八皇后,floodfill;
三:BFS
基于队列,层层展开;注意判重(双哈希)
优点:解与路径长度成正比的问题中,找到的第一个解是最优解;
缺点;占空间大,stl里的队列可能慢;
例题:拓扑排序,八数码问题(判重 hash八位数字);
四:迭代加深
给dfs加一个深度限制,逐步扩大深度限制,直到找到解或无解;
速度接近bfs,空间接近dfs;应用了dfs,可以看做dfs的一种优化;
适用于当搜索深度没有明确上限的情况。
虽然搜索次数增多,但每一次搜索和下一次搜索相比较微不足道,所以整体速度不会太慢;
搜到的第一个解深度最小,一定程度上拥有bfs的优点;
例题:四子连棋;
五:启发式搜索
1.利用启发信息引导搜索,进而减小无用搜索量;
启发信息的强度
强:降低搜索工作量,但可能导致找不到最优解
弱:一般导致工作量加大,极限情况下变为盲目搜索,但可能可以找到最优解
2.评价函数 :f[n]=g[n]+h[n]
f[n]:评价值
g[n]:真实值
h[n]:估计值
h*[n]:h[n]的真实值;
A算法:估价函数不一定准确,找到的第一个解不一定是最优解;
A*算法:满足h[n]<=h*[n]
1. 在满足条件的情况下,h[n]越大,算法越优;
h[n]=0,退化为普通bfs
2.不足:有的节点可能会被扩展若干次
3.改进:对h加以限制
当h满足h(ni) - h(nj) ≤ c(ni, nj),nj是ni的子节点,h(t) = 0,则h是单调的
若h(n)是单调的,则A*扩展了节点n之后,就已经找到了到达节点n的最佳路径。
即:当A*选n扩展时,有g(n)=g*(n)。
4.例题: poj 2449
http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx
六:优化
1.剪枝:
可行性剪枝:搜不到解,剪
最优性剪枝:一定搜不到最优解,剪
技巧:有些情况倒着搜,可能更快;co 1268
poj 1011 小木棍
2.记忆化:将搜到的答案记录
例题:codevs 滑雪
3.位运算:将当前状态用01序列表示;
技巧:bitset<233> x 开一个二进制233位的变量x
4.判重:
hash
map 慢,,不推荐
- 【笔记】 搜索
- android笔记 搜索文件
- web搜索学习笔记
- msm7627 camera 搜索笔记
- MySQL 全文搜索笔记
- Lucene搜索扩展笔记
- IOS笔记 搜索框
- 搜索笔记1.
- Elasticsearch服务器 搜索笔记
- 高级搜索技巧 笔记
- 搜索-Lucene学习笔记
- 搜索-Solr学习笔记
- 算法笔记--深度搜索
- 二叉搜索树笔记
- 一次搜索服务优化笔记
- linux 驱动笔记 快速搜索
- Nutch全文搜索学习笔记
- [Oracle笔记]正值表达式搜索
- Memcached (统计命令)-- 学习笔记(五)
- 1.2_配置Python基本环境
- 几种任务调度的 Java 实现方法与比较
- javaWeb 项目SSM配置要点及可能遇到的问题解决方法
- java:获取异常的堆栈信息
- 【笔记】 搜索
- 初学JAVA01
- 记录平台改造中的问题及解决方法
- 动态/静态语言及强类型/弱类型语言简析
- 关于 cvx & spams 的两个版本的安装、测试
- DIV+CSS(网页遮罩效果)
- jquery下载地址:https://code.jquery.com/jquery/ 影响范围: 版本低于1.7的jQuery过滤用户输入数据所使用的正则表达式存在缺陷,可能导致LOCA
- SQLLDR 简介
- newInstance()和new()的区别