承接我的搜索学习笔记(4)BFS最优问题求解实例、(5)DFS最优问题求解的缺陷,我在问题搜索求解的过程中添加剪枝条件,并且对BFS和DFS分别进行了剪枝前后的性能测试,结果和总结我写在了这篇文章的最后
BFS with Bounds & Constraints
|
|
DFS with Bounds & Constraints
|
|
Property Comparison
以下是各类搜索在案例测试中的搜索次数的比较:
—- | Case1 | Case1 | Case1 |
without bounds or constrains
BFS |—– 34 |—-119 |— 164 |
DFS |—– 36 |—-989 |— 564 |
with bounds and constrains
BFS |—– 10 |—— 14|—- 32 |
DFS |—– 23 |—— 35|—- 57 |
关于我最近对搜索问题的学习,我最后还想说几句:
1.剪枝很重要
2.当求最短路径时,用BFS绝对比DFS好,尤其是程序出bug后,打印调试时,dfs几百行的数据一条条验证我的内心是崩溃的。。。
3.未剪枝的DFS应该可以AC,如果不考虑时间限制
注:读者可以进一步了解其他常用的搜索算法,如双向宽度优先搜索,启发式搜索(A*算法)。我在整理时看到一篇比较好的博客,在这里推荐给大家
http://blog.csdn.net/huangxy10/article/details/8034285
博主用C++对象的形式,以八数码问题为案例展示了各类搜索算法