首页 > 编程语言 > 详细

搜索算法

时间:2015-07-07 08:12:11      阅读:226      评论:0      收藏:0      [点我收藏+]

    搜索的应用比较广泛、从最基本的DFS、BFS到记忆化搜索、再到启发式搜索、最后还要学习DLX才算是一个完结、

    曾经想过有没有一种搜索可以贪心的实现、Greedy Search、感觉已经和启发式搜索比较接近了、但是终究还不是、网上看到过这方面的内容、没有继续深入的探究、

 

    由于自身水平有限、只能粗略的总结一下自己学过的一些搜索姿势和应用、

 

深度优先搜索(DFS)

一般都是用递归的方式实现、写法比较简单、应用很广很灵活、

代码:

 

 

广度优先搜索(BFS)

一般都是用队列实现、写法比较固定、相对DFS来说、灵活性较低、

代码:

 

这两种基本的搜索方法、各有各的优势和缺陷、有的时候甚至可以将两者结合在一起、也有双向BFS这种、有兴趣可以去了解、

 

其实不管用哪种搜索方式实现、在最坏情况下、都要搜索完每一种状态、这个时候剪枝尤为重要、

搜索的优化一种是剪掉那些不可行的状态、比如奇偶剪枝、答案最优化剪枝之类的、

另一种优化方式就是对搜索模型进行优化、看是否可以换一个方向进行搜索、重新建立搜索模型、比较典型的就是数位DP、

 

记忆化搜索

一般情况下记忆化搜索与DP是可以相互转化的、也就是说很多DP可以写成记忆化搜索的形式、但是DP有一个记忆化搜索无法取代的地方、就是DP的优化、斜率优化、四边形优化等等、

 

 

DLX(Dancing Links)

舞蹈链算法的实现借助了双向十字链表这种数据结构、主要用来解决两类问题、精确覆盖和重复覆盖、

 

未完待续、、、

搜索算法

原文:http://www.cnblogs.com/A1Dark/p/4625891.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!