目录
1.5 一致代价搜索 V.S. 宽度优先搜索 V.S. 深度优先搜索
引言:
无信息搜索(也称为盲目搜索)策略。
无信息搜索:
指的是除了问题定义中提供的状态信息外没有任何附加信息。
搜索算法要做的是生成后继并区分目标状态与非目标状态。
搜索算法的分类:
这些搜索策略是以结点扩展的次序来分类的。
有信息搜索策略或启发式搜索策略:
知道一个非目标状态是否比其他状态“更有希望”接近目标的策略称为有信息搜索策略或者启发式搜索策略。
搜索算法的一般描述:
- 基于树的搜索算法都是通过扩展
(边缘节点)来搜索整个状态空间的。
- 所谓的
就是叶子节点,也被称为:
(候选扩展节点);
- 首先要确定当下所有的叶子节点,然后根据不同的搜索策略进行扩展。
- 对于某个叶子节点,如果它能够继续被探索,证明这条路还有可能存在解;如果不能进行探索操作,那么就代表解不可能存在于当下节点的扩展当中。
1.1 宽度优先搜索
宽度优先搜索(breadth-first search)的描述:
先扩展根结点,接着扩展根结点的所有后继,然后再扩展它们的后继,依此类推。一般地,在下一层的任何结点扩展之前,搜索树上本层深度的所有结点都应该已经扩展过。
宽度优先搜索是一般图搜索算法的一个实例,每次总是扩展深度最浅的结点。
具体实现:
通过将边缘组织成
队列来实现。就是说,新结点(结点比其父结点深)加入到队列尾,这意味着浅层的老结点会在深层结点之前被扩展。
目标测试的时机:
目标的测试是在结点被生成的时候,而不是结点被选择扩展的时候。
注意:
算法具有一般的图搜索框架,忽视所有到边缘结点或已扩展结点的新路径;可以容易地看出,这样的路径至少和已经找到的一样深。所以,宽度优先搜索总是有到每一个边缘结点的最浅路径。
下图给出了伪代码并显示了一个简单二叉树的搜索过程:


完备性(当算法有解时,是否能够保证算法找到解):宽度优先搜索是完备的。
如果最浅的目标结点处于一个有限深度
,宽度优先搜索在扩展完比它浅的所有结点(假设分支因子
是有限的)之后最终一定能找到该目标结点。请注意目标结点一经生成,我们就知道它一定是最浅的目标结点,原因是所有比它的浅的结点在此之前已经生成并且肯定未能通过目标测试。
最优性(算法能否找到最优解):宽度优先搜索不一定是最优的。
最浅的目标结点不一定就是最优的目标结点;从技术上看,如果路径代价是基于结点深度的非递减函数,宽度优先搜索是最优的。最常见的情况就是当所有的行动要花费相同的代价。(路径代价符合宽度优先的价值观)
时间复杂度(找到解需要花费多长时间):
。
假设搜索一致树(uniform tree)的状态空间中每个状态都有
个后继。搜索树的根结点生成第一层的
个子结点,每个子结点又生成
个子结点,第二层则有
个结点。这些结点的每一个再生成
个子结点,在第三层则得到
个结点,依此类推。现在假设解的深度为
。在最坏的情况下,解是那一层最后生成的结点。这时的结点总数为:
如果算法是在选择要扩展的结点时而不是在结点生成时进行目标检测,那么在目标被检测到之前深度
上的其他结点已经被扩展,这时时间复杂度应为
。
空间复杂度(执行算法时需要多少内存):
。
对任何类型的图搜索,每个已扩展的结点都保存在探索集中,空间复杂度总是在时间复杂度的
分之一内。特别对于宽度优先图搜索,每个生成的结点都在内存中。那么将有
个结点在探索集中,
个结点在边缘结点集中。所以空间复杂度为
,即它由边缘结点集的大小所决定。即使转换为树的搜索问题也节省不了多大的存储空间,如果状态空间有重复路径的话,这种转换会耗费大量时间。
指数级的复杂度令人担忧。下图说明了原因:

从起点和终点同时进行

本文深入探讨了无信息搜索策略中的三种关键算法:宽度优先搜索(BFS)、深度优先搜索(DFS)和一致代价搜索(UCS)。BFS优先扩展最浅结点,适用于寻找最浅目标解;DFS深入探索树的最深处,适用于内存有限的情况;UCS按路径代价扩展,保证最优解。此外,还讨论了迭代加深的深度优先搜索(IDS)在大状态空间中的优势。各种算法的时间和空间复杂度分析表明,它们各有适用场景,IDS在资源和解深度未知时尤为适用。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



