dfs和bfs
来源:互联网 发布:华讯网络好吗 编辑:程序博客网 时间:2024/05/21 10:49
广搜和深搜的区别(转)
一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的特点是"搜到就是最优解", 而深搜用于找多个解或者是"步数已知(好比3步就必需达到前提)"的标题,它的空间效率高,然则找到的不必定是最优解,必需记实并完成全数搜索,故一般情况下,深搜需要很是高效的剪枝(优化).
像搜索最短路径这些的很显著若是用广搜,因为广搜的特征就是一层一层往下搜的,保证当前搜到的都是最优解,当然,最短路径只是一方面的操作,像什么起码状态转换也是可以操作的。
深搜就是优先搜索一棵子树,然后是另一棵,它和广搜对比,有着内存需要相对较少的所长,八皇后标题就是典范楷模的操作,这类标题很显著是不能用广搜往解决的。或者像图论里面的找圈的算法,数的前序中序后序遍历等,都是深搜
深搜和广搜的分歧之处是在于搜索次序的分歧。
深搜的实现近似于栈,每次选择栈顶元素往扩年夜,
广搜则是操作了队列,先被扩年夜的的节点优先拿往扩年夜。
搜索树的形态:深搜层数良多,广搜则是很宽。
深搜合适找出所有方案,广搜则用来找出最佳方案
深搜和广搜的分歧:
深搜并不能保证第一次碰着方针点就是最短路径,是以要搜索所有可能的路径,是以要回溯,标识表记标帜做了之后还要打消失踪,是以统一个点可能被访谒良多良多次。而广搜因为它的由近及远的结点扩年夜次序,结点老是以最短路径被访谒。一个结点假如第二次被访谒,第二次的路径确定不会比第一次的短,是以就没有需要再从这个结点向周围扩年夜――第一次访谒这个结点的时辰已经扩年夜过了,第二次再扩年夜只会获得更差的解。是以做过的标识表记标帜不必往失踪。是以统一个点至多只可能被访谒一次。每访谒一个结点,与它相连的边就被搜检一次。是以最坏情况下,所有边都被搜检一次,是以时刻复杂度为O(E)。
我的理解:
一.深度优先搜索的特点是:
2.不一定会得到最优解,这个时候需要修改原算法:把原输出过程的地方改为记录过程,即记录达到当前目标的路径和相应的路程值,并与前面已记录的值进行比较,保留其中最优的,等全部搜索完成后,才把保留的最优解输出。
二.广度优先搜索法的显著特点是:
1.在产生新的子结点时,深度越小的结点越先得到扩展,即先产生它的子结点。为使算法便于实现,存放结点的数据库一般用队列的结构。
2.广度优先搜索算法,一般需要存储产生的所有结点,占的存储空间要比深度优先大得多,因此平时我们需要考虑溢出和节省内存空间得问题。
DFS与BFS的PPT讲解:http://wenku.baidu.com/link?url=uuVluDfJP-gW6FiV0F8J4s4VuEOU__uqW1nFjuOO-id9ntGdqXLLvwDN0eR3akZMKP_iBmA0xPGAE-SOwdWyN21HJoXrHbd7cvSx2zRkZBa
{
if() return;//判断条件 不满足时输出 一般的第一个为判断是否越界 后面的看题可以把剪枝那部分放在这里(其实就是提前判断,优化代码)
else
{
a[i][j]=1; dfs(x+1,y)......; ;a[i][j]=0;//把每次所在位置都标记为1,想其他方面遍历之后,所在位置就发生变化 所以把标记更新 //为什么标记 可以看看PPT
}
}
bfs一般应该是有时间,步数,或者其他的限制 一般使用队列,结构体数组也行 栈和队列在搜索中应用多一些 关于bfs可以看看《啊哈,算法》 里面是用的迷宫问题
关于剪枝,主要的剪枝条件有:
1、剩余可走区域小于时间
2、奇偶性剪枝
3、超时等
- DFS和BFS
- BFS和DFS模板
- BFS和DFS算法
- BFS和DFS算法
- BFS和DFS
- dfs 和 bfs 解析
- POJ3083 -- BFS和DFS
- bfs 和 dfs 专题
- 关于BFS和DFS
- DFS和BFS模板
- bfs和dfs 模板
- 算法-DFS和BFS
- 【图】BFS和DFS
- dfs和bfs
- acm bfs和dfs
- bfs和dfs
- dfs 和bfs
- DFS和BFS
- 浅谈访问权限
- Uva 11395 - Sigma Function (算术基本定理)
- Windows Server2008 R2 设置NAT 让Hyper-V连接Internet
- 九度题目1104整除问题
- B-树和B+树的应用:数据搜索和数据库索引
- dfs和bfs
- window环境下安装easy_install
- Linux Select/Epoll注记
- HDU 5531 几何公式
- Firefox 与 sublime text 3 通过LiveReload插件实现前端代码实时预览
- flask 实现上传图片并缩放作为头像
- POJ 1930 Dead Fraction(小数化分数)
- 【USACO5.3.3】Network of Schools
- Spark+Kafka的Direct方式将偏移量发送到Zookeeper的实现