深度优先搜索与宽度优先搜索的知识点归纳

1、什么是搜索?

       搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。在竞赛中,搜索法还被当做“救命稻草”——大多数问题都可以使用搜索来谋取部分分数。        搜索策略有很多,常见的有:深度优先搜索、宽度优先搜索、迭代加深搜索等。搜索算法的设计主要是一下几个步骤:确定状态和扩展方式、选用合适的搜索方式、优化。
2、、深度优先搜索与宽度优先搜索        搜索算法设计过程中,主要需要考虑的问题有两个:状态与状态之间的关系(即扩展方式)。如果将状态对应顶点,状态之间的关系对应边,原搜索问题可抽象成一棵搜索树。初始状态对应根节点,目标状态对应目标节点,搜索算法即找到一条从根节点到目标节点的路径(一个可行解)。详见下图:

    不同的搜索算法相当于搜索树的不同遍历方式。最常见的深度优先搜索(DFS -- Depth First Search)和宽度优先搜索(BFS -- Breadth First Search)对应着搜索树的两种遍历方式,如下图:


深度优先搜索所遵循的搜索策略是尽可能“深”地遍历搜索树,对应树的前序遍历。在深度优先搜索中,对于当前节点,如果有可行子节点,则向下遍历,否则回溯。        宽度优先搜索所遵循的搜索策略是尽可能“广”的遍历搜索树,对应树的分层遍历。在宽度优先搜索中,每次都先将搜索树某一层的所有结点全部访问完毕后再访问下一层,首次达到的目标节点通常就是最优解。



你可能感兴趣的:(NOI算法积累)