
——搜索——
搜索
Alex_McAvoy
想要成为渔夫的猎手
展开
-
搜索 —— 概述
【基本名词】搜索:利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。 特点:相比于单纯的枚举算法有了一定的方向性和目标性。 算法:在解的空间里,从一个状态转移到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案。 状态:是对问题在某一时刻进展情况的数学描述,或者是数学抽象。 状态转移:问题从一个状态转移到另一状态,这样进行一步步延伸...原创 2018-03-16 15:30:58 · 2819 阅读 · 0 评论 -
搜索 —— 暴力搜索
【暴力搜索】暴力搜索,就是将所有情况都举出,并判断其是否符合题目条件。其基本方法是分析题意后,找到一个合适的维度列举每一个元素,以完成题目。一般主流的 OJ 中,1000ms 的时间限制下可以运行操作数为 10^7 以内的运算(10^6 以内较保险),所以在采用枚举方法之前最好看一下数据范围,确保整个程序的执行操作数不会超过 10^6~10^7 量级。在编程实现上,暴力枚举需要两个条件...原创 2018-10-16 11:24:02 · 4410 阅读 · 0 评论 -
搜索 —— 深度优先搜索(DFS)
【概述】深度优先搜索,是从初始状态起,利用一定的规则生成搜索树,寻找下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。状态必须在遍历完所有它的子状态之后,才能继续进行对同一层中下一个...原创 2018-03-20 23:57:40 · 3278 阅读 · 0 评论 -
搜索 —— 广度优先搜索(BFS)
【概述】广度优先搜索从初始状态 S 开始,利用给定的规则,生成当前状态所有可能的状态,构成的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则再次生成再下一层的所有状态节点,对这一层的所有状态节点检查是否出现 G,若未出现,继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开,直到出现目标状态为止。广度优先搜索可以采用循环队列或动态链表来处理,...原创 2018-03-16 15:18:53 · 1534 阅读 · 0 评论 -
搜索 —— 深搜的剪枝技巧
【概述】搜索算法的时间复杂度大多是指数级的,难以满足对程序运行时间的限制要求,为使降低时间复杂度,对深度优先搜索可以进行一种优化的基本方法——剪枝。搜索的进程可以看做是从树根出发,遍历一颗倒置树(搜索树)的过程,所谓剪枝,就是通过某些判断,避免一些不必要的遍历过程,形象的说,就是减去搜索树中的某些枝条。显而易见,应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条舍弃哪些枝条保...原创 2019-07-23 13:00:52 · 8124 阅读 · 0 评论 -
搜索 —— 广搜的优化技巧
【例题】连连看(HDU-1175)(简单推导):点击这里 字串变换(洛谷-P1032)(string的使用):点击这里 非常可乐(HDU-1495)(三维BFS):点击这里 Mud Puddles(POJ-3626)(负坐标预处理):点击这里 King's Path(CF-242C)(map+BFS):点击这里 Minimum Distance in a Star Graph(201...原创 2018-12-04 21:50:52 · 1158 阅读 · 0 评论 -
搜索 —— 启发式搜索
【概述】启发式搜索算法,就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。有时我们会遇到这样的一类题:题目描述的是一道时间复杂度很高的 NP 问题,我们要找到其中的最优解,显然不可能在短时间内找到最优解。此时我们可以利用启发式搜索算法,来进行求解。在程序设计竞赛中,启发式搜索的题目并不是很多,但启发式搜索算法在数据建模竞赛中应用的比较广...原创 2020-02-03 20:33:21 · 4427 阅读 · 0 评论