关于广搜优化的半吊子总结
来源:互联网 发布:电脑无损音乐播放软件 编辑:程序博客网 时间:2024/05/17 08:49
这几天我这个蒟蒻为了搞懂部分的广搜优化也是心累,所以来做个简单的总结。
当然凭借目前的水平能够总结的只有小部分的内容,毕竟我超弱啊QAQ
一、双向bfs
在已知目标状态的情况下,可以从目标状态和初始状态一起开始搜索。
用两个队列表示两个方向的搜索,一旦有重合的点,即为正解。
当两个队列皆不为空时,对未处理元素少的队列进行扩展。注意,扩展和处理一定要分开,扩展仅仅代表将一个合法的点加入队列,而处理则是另外的部分,切忌在扩展函数中对元素进行处理。【估计这种错误只有我会犯orz】 所以一定要理解清双向广搜的思想。
以下是伪代码orz
while (!q1.empty()&&!q2.empty()){if (sum1<sum2) {//扩展q1的点;//处理;}else{//扩展q2的点;//处理;}}while(!q1.empty()){//扩展q1的点;//处理;}while(!q2.empty()){//扩展q2的点;//处理;}}
二、分支定界
这个由于自身了解的不是很深刻,所以只能浅显的总结几句。
用最简单的话来讲,就是边搜索边剪枝,将不可能达到目标的点以及一定不为最优解的点剪枝即可。
每一次搜索将当前的点与目前的最优解比较,如果明显不为最优解即可弃去该点。
分支定界可用 队列法(FIFO)或者优先队列法(最大堆/最小堆),根据题意具体实现。
个人认为这个讲的很详细可以参考 分支定界
三、A*算法
这里就偷个懒分享一个dalao的博客,非常好懂。
点击打开链接
写出估价函数,找到最优点。
ps:A*算法对于空间需求很大,可能到达指数级别,但在理论时间上是最优的。
四、迭代加深搜索
算是bfs+dfs???
迭代加深搜索经常用于深度上没有上界的问题。
通过设定一个maxd的深度多次进行搜索,如果没有找到解,则maxd++,直到找到。
此时若已知当前点要到达目标所需深度大于maxd,就剪枝。
使用迭代加深搜索时要保证一定可以找到解,否则会无限循环下去orz。
五、hash???
这个不say了,都懂……
好,蒟蒻的总结到此结束,啪啪啪啪啪啪!!!!!
有兴趣的话来看一看我的PPT啊嘿嘿嘿~
- 关于广搜优化的半吊子总结
- 关于广搜的学习
- 关于穷举、深搜、广搜的思考。
- 广搜总结
- 关于ListView的优化总结
- 关于性能优化的总结
- 关于SEO优化的总结
- 【优化】关于索引的总结
- 烦死这种半吊子的感觉了
- 预处理的广搜
- 广搜的学习
- 广搜BFS prime path+广搜总结
- 关于优化的一点小总结
- 关于C 代码优化的方法总结
- 关于性能优化的一点总结
- 关于性能优化的一个总结
- 关于矩阵优化的DP总结
- 关于Android性能优化的简单总结
- 空间配置器(二)
- python —— time模块
- 利用Byteman来统计Java中方法的耗时
- 子线程访问 主线程控件
- [codeforces585F/51nod1587]Digits of Number Pi
- 关于广搜优化的半吊子总结
- mogodb的使用及自制工具类
- 在子线程中利用主线程的Handler的post()方法
- C++ char* 的若干问题之二:char*作为形参能否影响实参的值
- .index() :gt()Selector :lt()Selector
- d3.js学习笔记
- Binary Tree Postorder Traversal
- chrome浏览器开发者工具的使用
- 深入理解css3的border边框