两类搜索
搜索算法蕴含了递归思想,通过不停的尝试去获得到结果。
除最简单的暴力搜索外,一般我们常用的是深搜(DFS)、广搜(BFS)这两类。
两类搜索的个人理解与体会:
一.深搜
深搜我多使用递归的方法,在不同的路径中,优先按规则将一条路径走到底,再回头依次将其他路径走到底。
比如上下左右四个方向 递归顺序为上左下右,就是先向上走到头,然后退一步,往左走一步,再向上走到头,依次类推,递归的整个过程比较难理解,但只要知道分解的几个步骤就可以控制整个过程。(全排列其实就是这种思路)
这里贴大佬总结的一段话概况深搜的思路:
状态A(我是谁,我在哪)
1.判断当前状态是否满足题目需要,满足则进行保存,比较,输出等操作
2.判断当前状态是否合法(当前状态是否满足题目要求,或者数组是否越界),满足继续执行否则回到上次调用
3.往下走一层,递归调用dfs()
二.广搜
还是用上下左右走格子举例,深搜是选一个方向走到底,然后再下一个方向,广搜就是先把第一个格子相邻的四个方向都走一遍,然后再按顺序,把下一个格子的相邻格走一遍,即一层一层的推进。
广搜一般需要存储产生的所有结点,占的存储空间要比深搜大,因此设计程序的时候,必须要考虑储存空间问题。与此同时,广搜一般也不需要回溯,因此运算比深搜快一些。
个人碎碎念
我能说的东西其实不多,主要还是集训队有任务,我自己的经验贡献最多有个走格子的举例,还不一定便于理解,鉴于我这种萌新是在是没啥水平,我再贴几篇链接,不小心点进来看的人也不算是浪费时间了。