搜索算法:原理、策略与性能评估
1. 搜索算法基础
搜索算法以搜索问题为输入,输出问题的解或表示无解。在搜索过程中,会在状态空间图上构建搜索树,从初始状态出发形成各种路径,试图找到通向目标状态的路径。
1.1 状态空间与搜索树的区别
状态空间描述了世界中可能存在的(可能是无限的)状态集合,以及允许从一个状态转换到另一个状态的动作。而搜索树描述了这些状态之间的路径,指向目标状态。搜索树中,对于任何给定的状态可能有多个路径(即多个节点),但树中的每个节点都有一条唯一的路径回到根节点。
1.2 节点扩展与前沿
以从阿拉德(Arad)到布加勒斯特(Bucharest)的路径搜索为例,搜索树的根节点是初始状态阿拉德。通过考虑该状态的可用动作,使用结果函数确定这些动作的指向,并为每个结果状态生成一个新节点(子节点或后继节点),每个子节点的父节点为阿拉德。
接下来需要选择下一个要考虑的子节点,这是搜索的核心。假设先扩展锡比乌(Sibiu)节点,会得到一组未扩展的节点,这些节点构成了搜索树的前沿。任何为其生成了节点的状态都被称为已到达状态。
前沿将状态空间图分为两个区域:内部区域的每个状态都已被扩展,外部区域的状态尚未被到达。
以下是最佳优先搜索算法的代码实现:
def BEST-FIRST-SEARCH(problem, f):
node = NODE(STATE=problem.INITIAL)
frontier = a priority queue ordered by f, with node as
超级会员免费看
订阅专栏 解锁全文

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



