搜索算法总结

来源:互联网 发布:昆山编程培训 编辑:程序博客网 时间:2024/06/05 02:30

搜索算法总结


  所谓搜索算法,就是在解的空间里,从一个状态转移(按照要求拓展)到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案。

  搜索又分为广搜(BFS)和深搜(DFS)。

  深搜(DFS)即深度优先搜索,始终对下一层的结点优先进行搜索,后面层数的结点遍历过后再返回上一层,逐层返回,直到根节点。深搜强调的是“全”,即所有结点都将至少遍历一遍。因此,深搜往往适用于解决一些“所有”类型的问题,如求:“所有方案”,“所有个数”。

      

  广搜(BFS)即广度优先搜索,往往利用queue队列,始终优先遍历前一层的结点,当前一层的结点全部遍历过后再遍历下一层的结点。当发现所需目标时,立即结束搜索,不再进行下一步的遍历。因此,广搜往往适用于求“最”类型的问题,如求:“最少步数的”,“最小转折次数”。

       

  搜索的实质是递归(尤其是深搜)、是穷举,遍历的过程中,所需求的状态必须满足一定的条件,最常见的如:不能超出地图范围,行走的方式等。

  搜索实际上也是利用电脑的强大的计算能力进行大规模的运算求解答案,因此“剪枝”也非常的重要(对于oj的题来说,有时候不剪枝还会TLE),利用剪枝来减少计算量以及减少重复运算,从而降低时间复杂度。在剪枝时,常用的方法如:使用一个数组,来储存遍历过的位置、状态。 

  当掌握了搜索算法的思想、熟悉了DFS和BFS格式之后,解决问题的难点就在对问题的分析和条件的分析上了。要清楚如何利用搜索这个工具去解决这个问题,这关系着代码的具体实现。而当问题比较复杂的时候,需要满足的条件往往也不是那么显而易见,需要去思考、捉摸,考虑有可能出现的各个情况(符合要求的和不符合要求的条件都要考虑到),不能漏条件,更不能错。



1 0
原创粉丝点击