编程基础篇 · 搜索与决策
BFS 与 DFS:Agent 在代码库里找文件
工程进阶篇里,Coding Agent 接到「找出登录报错的原因」后,会在几百个文件夹里翻代码。往哪儿翻?先翻完这层再下去,还是抓住一条线索钻到底?这是两种截然不同的性格——BFS(广度优先)和 DFS(深度优先)。这一课让它们各走一遍同一个迷宫,性格一眼见分晓。
走迷宫看性格 · 同一张图,两种走法
🏁 是起点,🎯 是终点,深灰是墙。两个按钮各代表一种性格,留意三处:染色的形状(BFS 是一圈圈的波纹,DFS 是一条蛇);下方两个计数器;以及最后绿色高亮的路——谁的更短?谁探过的格子更多?
先跑 BFS,看波纹怎么扩散
BFS · 波纹式层层扫
访问格子数–
最终路径长–
DFS · 单头蛇形深入
访问格子数–
最终路径长–
两个数字讲完了全部理论。BFS 访问 77 格才碰到终点——它把「离起点 1 步、2 步、3 步……」的格子全泡开,代价是这一大片都得记在内存里;但正因为按距离一层层推进,它撞到终点的那条路必然是最短的(23 格)。DFS 只访问了 44 格就到了,内存里只需记住当前这一条路;但它走出的路 37 格,比最短路绕了一半还多——运气不好时还会一头扎进死胡同再倒出来(变浅的格子就是回溯)。
这和 AI 有什么关系?
把迷宫的格子换成文件夹和网页,这两种性格立刻出现在你身边:
Coding Agent 找代码
先 ls 看一眼顶层目录——这是 BFS 扫一层,快速建立全局感;发现 auth/ 文件夹最可疑,就一头钻进去逐层深挖——切换成 DFS。真实 Agent 是混合策略:先广后深,还会用 grep 直接跳跃。
网络爬虫
从首页出发,先抓完首页链出的所有页面,再抓「链接的链接」——典型 BFS,保证离首页近的重要页面先入库。要是 DFS,可能顺着一条链接链钻进某论坛第 999 页出不来。
「共同好友」推荐
「你可能认识的人」= 从你出发 BFS 走两层:第一层是你的好友,第二层就是「好友的好友」。离你 2 步的人排在离你 5 步的人前面——层数本身就是亲疏。
没有谁全面胜出,只有场景匹配。要「最短 / 最近 / 最相关」,用 BFS,接受内存开销;要「先找到一个能用的解、内存又紧张」,用 DFS,接受路径可能绕。下一课的贪心和采样、再下一课的 Beam Search,本质上也是在这张「搜索策略光谱」上挑位置。
✅ 这一课想和你分享的
- BFS 层层扫:按距离一圈圈泡开,找到的一定最短——代价是内存里泡着一大片
- DFS 一条道走到黑:省内存、常常更快碰到解,但路径不保证短,还会回溯
- 访问数 vs 路径长:77/23 对 44/37,两组数字就是两种性格的全部账本
- 真实系统混着用:Agent 先 ls 一层(BFS)再钻可疑文件夹(DFS)
- 爬虫、共同好友推荐都是图搜索——迷宫只是最直观的一张图