标签:
搜索的应用比较广泛、从最基本的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