BFS / DFS 工程入门:k-hop 查询、子图抽取与路径可达性 ACERS 解析

副标题 / 摘要 BFS / DFS 不是“会写就行”,而是要到工程可用、可控成本、可证明正确。本文按 ACERS 模板,把最常用的三类任务(k-hop 查询、子图抽取、路径可达性)拆成可复用模板:迭代实现 + early stop + visited 结构选型。 预计阅读时长:12~16 分钟 标签:图、BFS、DFS、k-hop、子图抽取 SEO 关键词:BFS, DFS, k-hop 查询, 子图抽取, 路径可达性, visited bitmap, bloom filter 元描述:面向工程场景讲解 BFS/DFS:迭代版避免栈溢出、early stop 降低搜索成本、visited bitmap/bloom 优化内存与判重性能。 目标读者 正在做图数据库、风控关系图、调用链分析的工程师 只会“题解式 BFS/DFS”,但还没形成工程模板的同学 希望把图遍历写成“稳定、可观测、可扩展”代码的人 背景 / 动机 在工程里,BFS/DFS 通常不是一次性离线脚本,而是在线请求的一部分: k-hop 邻域查询要控制时延 子图抽取要控制内存与输出规模 路径可达性要快速返回 true/false 如果只停留在教科书递归模板,会很快踩坑: 深图导致递归栈溢出 无剪枝导致无谓扩展 visited 结构选错,内存和吞吐同时恶化 所以这篇文章聚焦一个目标: 把 BFS / DFS 升级到“滚瓜烂熟且能上线”的程度。 核心概念 概念 作用 工程关注点 BFS(队列) 按层扩展、天然支持 hop 层级 适合 k-hop、最短边数、层级子图 DFS(栈) 深入探索、路径存在性高效 适合快速可达性判断与深度剪枝 early stop 提前终止搜索 控制 P99 延迟和资源消耗 visited bitmap 精确判重,内存紧凑 需先做节点 ID 压缩 bloom filter 概率判重/预过滤 有假阳性,不能单独用于“严格正确性”场景 A — Algorithm(题目与算法) 题目还原(LeetCode 风格训练题) 给定一个无权图 G(邻接表),起点 s,最大跳数 K,可选目标点 t: ...

2026年2月9日 · 10 分钟 · map[name:Jeanphilo]