程式設計基礎篇 · 搜尋與決策
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)
- 爬蟲、共同好友推薦都是圖搜尋——迷宮只是最直觀的一張圖