深度优先,广度优先和迭代加深搜索算法
2015-10-05 11:20
351 查看
1. 深度优先搜索(DFS):算法总是能尽可能快的抵达搜索树的底层。
n 皇后问题的空间复杂度为 O(n)。如果搜索树有 d 层,每个节点有 c 个子节点,时间复杂度与c^d成正比。
如USACO的1.4节的mother's milk(题目链接:http://train.usaco.org/usacoprob2?a=f7wbGbrI2kF&S=milk3)即可用DFS解答。其时间复杂度为O(6^c)。
下图所示为三个容积分别是2,5,10时的深度图,其中每个节点有6个子节点(即六种不同倒法)。
2. 广度优先搜索(BFS):每次都先将搜索树某一层的所有节点全部访问完毕后再访问下一层。
广度优先搜索的空间复杂取决于每层的节点数。如果搜索树有 k 层,每个节点有 c 个子节点,那么最后将可能有 c^k 个数据被存入队列
3. 迭代加深搜索(ID):广度优先搜索可以用迭代加深搜索代替。迭代加深搜索实质是限定下界的深度优先搜索,即首先允许深度优先搜索搜索
k 层搜索树,若没有发现可行解,再将 k+1 后再进行一次以上步骤,直到搜索到可行解。这个“模仿广度优先搜索”搜索法比起广搜是牺牲了时间,但节约了空间。
n 皇后问题的空间复杂度为 O(n)。如果搜索树有 d 层,每个节点有 c 个子节点,时间复杂度与c^d成正比。
如USACO的1.4节的mother's milk(题目链接:http://train.usaco.org/usacoprob2?a=f7wbGbrI2kF&S=milk3)即可用DFS解答。其时间复杂度为O(6^c)。
下图所示为三个容积分别是2,5,10时的深度图,其中每个节点有6个子节点(即六种不同倒法)。
2. 广度优先搜索(BFS):每次都先将搜索树某一层的所有节点全部访问完毕后再访问下一层。
广度优先搜索的空间复杂取决于每层的节点数。如果搜索树有 k 层,每个节点有 c 个子节点,那么最后将可能有 c^k 个数据被存入队列
3. 迭代加深搜索(ID):广度优先搜索可以用迭代加深搜索代替。迭代加深搜索实质是限定下界的深度优先搜索,即首先允许深度优先搜索搜索
k 层搜索树,若没有发现可行解,再将 k+1 后再进行一次以上步骤,直到搜索到可行解。这个“模仿广度优先搜索”搜索法比起广搜是牺牲了时间,但节约了空间。
相关文章推荐
- HDU 2295 Radar (DLX求重复覆盖, A*搜索)
- 给ubuntu的firefox添加“百度搜索”
- linux md5sum与sha1sum
- Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法
- 在ubuntu下对stm32开发板的编译、烧写、调试
- 网络编程(5)——HttpURLConnection/HttpClient的区别
- STL与泛型编程(1)---模板
- poj1930
- Sublime快捷键
- 链表创建、反转
- java基础——运算符
- 文章标题
- Android中SimpleAdapter详解
- ocp-139
- BM算法
- 欢迎使用CSDN-markdown编辑器
- 关于软件测试的个人思考
- 选择排序-java
- ocp-138
- ocp-137