搜索总结

来源:互联网 发布:管家婆软件多少钱 编辑:程序博客网 时间:2024/06/05 23:50

        搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。

        相比于单纯的枚举算法有了一定的方向性和目标性。算法是在解的空间里,从一个状态转移(按照要求拓展)到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案(目标的状态)。

广度优先搜索(bfs):

从初始状态S 开始,利用规则,生成所有可能的状态。构成的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则。生成再下一层的所有状态节点,对这一层的所有状态节点检查是否出现G,若未出现,继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。

深度优先搜索(dfs):

从初始状态,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。

常见题型:

1、排列

2、分解(一个数有几种分解方法);对应的有合成(几个数可以组成这个数),如一个简单的背包问题:一个包可以放的重量是多少,每件物品重量是多少?、

3、遍历。怎么走?怎么跳?有几种走法?(有障碍就用bool型标记一下)

    这类题基本两种情况,一是广搜,一个是深搜,广搜所有情况都要来一遍,确实好用深搜取一部分,遍历了所有的,而且与动态规划相似相对来说,广搜用的更多,例如地图类的问题,给定一个地图,上下左右各个方向进行搜索。总的来说,只有少数题感觉思路比较好想,大部分题目都很难直接下手,要思考很久。就是看了题有些想法,但是很难下手。还有要多注意细节的处理,很多时候都是因为细节错误导致无法AC


原创粉丝点击