码迷,mamicode.com
首页 > 编程语言 > 详细

搜索算法

时间:2015-07-07 08:13:29      阅读:152      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!