搜索专题总结

本次专题是搜索,搜索就是通过不断列举状态来求得结果,主要分为二分搜索,三分搜索,广度优先搜索,深度优先搜索。二分搜索和三分搜索比较简单,广搜和深搜需要考虑许多细节问题。

对于二分搜索,方法是:确定上线和下限,然后通过不断二分取中间值逐渐缩小区间,当区间上下限差足够小时就可以认为,求得了结果,典型例题有1Can you solve this equation,2Strange fuction,5Turn the corner等,二分常出现的问题就是超时。对于三分搜索适用,当需要求某凸性或凹形函数的极值,通过函数本身表达式并不容易求解时,就可以用三分法不断逼近求解,方法就是:类似二分先确定中间值,再用中间值和其中一个边界确定另一个中间值,之后看看mid和midmid谁更接近结果(极值),之后缩小上下限,逼近。典型例题有5Turn the corner,6Line belt

不管二分和三分,里面都涉及相关数学关系,进行转化,转化好了变成公式,可以将搜索问题简化,也会更快。

广度优先搜索方法是从初始状态S 开始,利用规则,生成所有可能的状态。构成的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则,生成再下一层的所有状态节点,对这一层的所有状态节点检查是否出现 G ,若未出现,继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。代码套路一般是把数据放在队列中,然后每次取出并展开,如果有目标状态停止,之后把展开的所有状态放到 队列中循环下去,典型例题为10Catch him,12rescue,14A strange lift等。
深度优先搜索是:从初始状态,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。深度优先搜索一般都需要大量限制条件,以来提高效率。典型例题为11Oil Deposits,16Red and Black,20Prime Ring Problem。
深搜和广搜比较复杂,需要考虑诸多细节问题,一般需要设置方向数组,标记数组,用来对搜索过的区域标记,以免重复搜索

你可能感兴趣的:(搜索专题总结)