上个周末,由于参加英语竞赛错过了一堂课,已经开始了搜索的学习。
搜索,其实就是穷举出问题的所有或部分情况从而求出问题解的一种方法。搜索相较于一般的枚举法有了一定的方向性和目的性。而这就用到了状态转移。目前,所常用的状态转移分为两种——广度优先搜索(BFS)和深度优先搜索(DFS)。广度优先搜索是按照层数一层一层来遍历的,根据队列先进先出的原理,将每一层的节点按从左到右的顺序依次放入队列中;而深度优先搜索可以简单的理解为“固执的一路走到黑”,从初始状态,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。
BFS & DFS 都有其框架,而最关键的便是从当前状态循环拓展下一个状态。