所谓的 双向BFS
来源:互联网 发布:pyqt5 知乎编程 编辑:程序博客网 时间:2024/06/01 01:34
双向BFS,既然是双向的,那么就得知道起点和终点,这样,我们就可以进行双向搜索了。
但是,双向BFS是否真的可以提高效率呢?如果能,那么又能提高多少呢?
看到过一个图,说双BFS可以在BFS的基础上把时间和空间复杂度上都减半。实际上,在许多的实际应用中,往往不仅仅是减半!
我们假设,单向BFS需要搜索N层才能到达终点,在每个层需要进行的判断量(即通常的那个for循环)为X。那么,单BFS的运算量为:X^N。
如果换成双BFS,那么前后各搜索 N/2层,那么总的运算量为:2 * ( X ^ ( N/2 ) )。显然当X比较大时,在运算量上不仅仅不仅仅是减半那么简单。特别的,如果X=1,那么双BFS也就退化成了单向BFS了,实际上,此时也就是可以用DFS来进行深搜了,而且代码相对来说更加简洁。
贴一份双BFS的代码(并不是一个真正的代码,而是一个思路):
void BFS(){ queue<state> Q[2]; vis[2]; Q[0].push;Q[1].push();//起终状态入队 vis[0]=vis[1]=1;//标志起终状态 int deep=0; while(!Q[0].empty()||!Q[1].empty()){ int i=0; while(i<2){ state tp=Q[i].front(); if(tp.step!=deep){i++;continue;} Q[i].pop(); for(.....) if(vis[1-i]) {cout<<(deep*2+i+1)<<endl;return;//找到解 if(vis[i]) continue;//状态已经存在 Q[i].push(); vis[i]=1; } } deep++; }}
0 0
- 所谓的 双向BFS
- HDU1195的双向bfs
- 双向BFS。双向DFS的妙用。
- 迷宫问题的双向BFS
- 双向BFS
- 双向BFS
- 双向BFS
- 双向BFS
- 双向BFS
- 双向BFS
- POJ1915 BFS&双向BFS
- 所谓的....
- poj1915~双向bfs和bfs
- Solitaire(单向BFS||双向BFS)
- BFS、双向BFS和A*
- BFS、双向BFS和A*
- BFS、双向BFS和A*
- 双向BFS分析
- poj1419Graph Coloring
- 工厂模式
- 第五周项目二:对象作为数据成员
- X264如何阅读数
- java同步器——1——笔记
- 所谓的 双向BFS
- tomcat加载Listener,Filter,Servlet顺序
- Socket编程笔记
- Ibatis 批量操作 和 三级下拉框连动问题
- Socket网络编程入门
- 矩阵(n阶方阵)的初等变换 初等矩阵 几何意义
- oracle_基础八(Undo)
- Phone List 南邮NOJ 1522
- 最傻的人是我