
一起动脑筋 · 先看一个小故事
女孩丢了一张贴纸,机器人先列出可能放它的抽屉,再决定检查顺序。
把过程摊开来看
- 候选抽屉 A、B、C
- 检查 A没有
- 检查 B找到
- 结束报告位置
搜索是在候选状态或位置中寻找符合条件的目标。
明确候选范围、检查规则和结束条件,才能判断有没有漏掉可能答案。
01搜索到底是什么?
搜索(Search)就是在一组可能情况中,按照一定规则寻找目标。
例如:
- 在数组中找一个数字
- 在迷宫中找出口
- 在棋盘中寻找下一步
- 在图中寻找一条路径
02搜索和“查找”一样吗?
有联系,但范围更广。
查找
常指在现有数据中找某个元素,例如顺序查找和二分查找。
搜索
还可以探索一系列状态和选择,例如 DFS、BFS、回溯。
03搜索问题通常要先明确什么?
状态
怎样描述“现在在哪”。
起点
从哪里开始。
目标
什么情况算成功。
转移
下一步可以怎么走。
访问记录
哪些状态已经处理过。
04为什么要记录访问过的状态?
如果状态之间可能形成环,例如 A 能到 B,B 又能回到 A,不记录访问状态就可能反复循环。
A→B→A→...
05搜索一定能找到答案吗?
不一定。可能根本没有满足条件的状态。
因此搜索算法除了“找到答案”外,还要能正确判断“无解”。
06搜索一定要把所有情况都看完吗?
不一定。
如果提前找到目标,可以停止;如果利用问题性质排除大量不可能情况,也能减少搜索量。
你已经知道了什么
- 搜索是在候选状态中寻找目标。
- 搜索范围比普通数组查找更广。
- 状态、起点、目标、转移和访问记录是常见要素。
- 搜索要能处理有解和无解。
- 避免重复状态是提高搜索效率的重要方法。
下一篇:暴力搜索:所有可能都试一遍
轮到你来试一试
若只看抽屉 A 没有,就说贴纸不存在,问题在哪?
想好了吗?点开看解释
还没检查 B、C,也没有证据排除它们。必须检查完或用正确规则排除所有候选。