码迷,mamicode.com
首页 > 其他好文 > 详细

[专题练习] Part1 搜索

时间:2018-10-10 20:15:40      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:广搜   练习   深度   font   dfs   blog   最优   深度优先   水过   

一.DFS(深度优先搜索)

过于水略过。

二.BFS(广度优先搜索)

同上。

三.记忆化

记忆化搜索,就是我们的状态会重复利用,为了防止状态的重复计算耗费不必要的时间,我们可以把这个状态的结果记录下来,然后查询表中的结果就行了。

一般来所,记忆化搜索是和DP等价的。如果递推的DP不好写,可以考虑用记忆化搜索实现,但是因为是递归,所以常数略大。记忆化搜索有明显的优点,就是可以不用考虑状态在哪里终止,只用知道状态会终止就行了。

四.搜索剪枝

这是一门博大精深的学问, 通常用于解决搜索时间复杂度过高的问题。

原理就是在庞大的搜索树上剪去不可能对答案产生贡献的枝条。

搜索+剪枝的时间复杂度是$O(玄学)$,因为我们只能通过经验来估测剪枝效果。

所以考试打暴力的时候一定要多写剪枝,尤其是奇形怪状的玄学剪枝(参考i207m某次比赛的$N^2$跑过1e9)。

几道例题:

1. Noip2015斗地主  。

贪心出牌,出完顺子枚举出其他的尽可能出的多的牌的组合。

加上最优化剪枝,如果现在出了$ans-1$次没有出完就剪枝。

2.Noip2009靶形数独

我当时用了$lowbit$优化常数,然后把整个棋盘分成上下两部分,如果上半部分空位比下半部分多,就从下半部开始搜索。这样就睡、水过去了。

其实也可以按格搜索,优先搜可填的少的格。

还有$A*$剪枝,如果剩下的格子都填9还比$ans$小的话就剪枝。

通常使用的剪枝技巧

1.最优性剪枝。

2.$A*$剪枝。

3.改变搜索顺序,优先搜索扩展出的状态比较少的状态。

五.双向广搜

正在研究中...

[专题练习] Part1 搜索

标签:广搜   练习   深度   font   dfs   blog   最优   深度优先   水过   

原文地址:https://www.cnblogs.com/BriMon/p/9768460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!