先看老师画的重点
状态搜索
状态搜索是搜索最基本的类型。它通过在状态空间中的初始状态出发,按照一定的顺序和条件对空间中的状态进行遍历,最终找到目标状态。
树搜索
1. 核心定义
将状态搜索问题抽象为树状层级结构:
- 根节点对应初始状态,所有节点代表具体状态;
- 树枝对应状态转移的动作 / 路径;
- 前沿(Fringe):存储待扩展的节点集合;
- 搜索逻辑:从根节点(初始状态)开始扩展节点,当前沿中出现目标状态时,停止搜索并返回路径。
2. 流程
function Tree-Search(problem, fringe) returns 解/失败
fringe ← 加入初始状态节点
loop do
若前沿为空则返回失败
取出前沿首节点
若该节点是目标状态则返回
扩展该节点的所有后继节点,加入前沿
3. 不足
无状态去重机制,同一状态可能重复进入前沿,导致冗余扩展(如迷宫中同一位置被多次探索)
图搜索
1. 核心定义
是树搜索的改进版,新增封闭集(closed)—— 存储已扩展的状态,避免重复探索同一状态。
2. 流程
function Graph-Search(problem, fringe) returns 解/失败
closed ← 空集合
fringe ← 加入初始状态节点
loop do
若前沿为空则返回失败
取出前沿首节点
若该节点是目标状态则返回
若该节点状态不在 closed 中:
将状态加入 closed
扩展该节点的所有后继节点,加入前沿
3. 不足
可能错过最优解(因为每个节点只搜索一次)
树搜索与图搜索的区别与联系
联系
- 图搜索基于树搜索框架设计,核心流程(初始化前沿、循环取节点、目标测试、扩展节点)与树搜索一致;
- 两者均通过'前沿'管理待扩展节点,本质是遍历所有可能状态以寻找目标。
区别
| 维度 | 树搜索 | 图搜索 |
|---|---|---|
| 状态去重机制 | 无封闭集,可能重复扩展同一状态 | 有 closed 集合,避免重复扩展 |
| 空间复杂度 | 较低(无额外存储) | 较高(需存储 closed 集合) |
| 适用场景 | 状态无重复的问题 | 存在重复状态的问题(如路径规划) |
| 搜索效率 | 可能因冗余扩展降低效率 | 因去重机制效率更高 |
搜索策略评价
评价一个搜索算法,从四个维度进行——完备性、最优性、空间复杂度、时间复杂度
- 完备性:只要问题有解,算法能不能一定找到?(比如找钥匙,能不能保证找到,不管钥匙藏在哪)
- 最优性:找到的解是不是'最好的'?(比如找最短路径,能不能找到距离最短 / 代价最小的)
- 时间复杂度:找解要花多久?(用'搜索的节点数'衡量,节点越多越慢)


