女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩丢了一张贴纸,机器人先列出可能放它的抽屉,再决定检查顺序。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 候选抽屉 A、B、C
  2. 检查 A没有
  3. 检查 B找到
  4. 结束报告位置

搜索是在候选状态或位置中寻找符合条件的目标。

明确候选范围、检查规则和结束条件,才能判断有没有漏掉可能答案。

01搜索到底是什么?

搜索(Search)就是在一组可能情况中,按照一定规则寻找目标。

例如:

  • 在数组中找一个数字
  • 在迷宫中找出口
  • 在棋盘中寻找下一步
  • 在图中寻找一条路径

02搜索和“查找”一样吗?

有联系,但范围更广。

查找

常指在现有数据中找某个元素,例如顺序查找和二分查找。

搜索

还可以探索一系列状态和选择,例如 DFS、BFS、回溯。

03搜索问题通常要先明确什么?

状态

怎样描述“现在在哪”。

起点

从哪里开始。

目标

什么情况算成功。

转移

下一步可以怎么走。

访问记录

哪些状态已经处理过。

04为什么要记录访问过的状态?

如果状态之间可能形成环,例如 A 能到 B,B 又能回到 A,不记录访问状态就可能反复循环。

ABA...

05搜索一定能找到答案吗?

不一定。可能根本没有满足条件的状态。

因此搜索算法除了“找到答案”外,还要能正确判断“无解”。

06搜索一定要把所有情况都看完吗?

不一定。

如果提前找到目标,可以停止;如果利用问题性质排除大量不可能情况,也能减少搜索量。

你已经知道了什么

  • 搜索是在候选状态中寻找目标。
  • 搜索范围比普通数组查找更广。
  • 状态、起点、目标、转移和访问记录是常见要素。
  • 搜索要能处理有解和无解。
  • 避免重复状态是提高搜索效率的重要方法。

下一篇:暴力搜索:所有可能都试一遍

轮到你来试一试

若只看抽屉 A 没有,就说贴纸不存在,问题在哪?

想好了吗?点开看解释

还没检查 B、C,也没有证据排除它们。必须检查完或用正确规则排除所有候选。