图算法专题
- 学习路径:
/zh/dev/algorithm/graph/00-graph-algorithms-learning-path/ - 本目录收纳图遍历、可达性、最短路、连通性、中心性、社区发现、子图匹配、动态图、图分区与图计算模型相关文章。
/zh/dev/algorithm/graph/00-graph-algorithms-learning-path/副标题 / 摘要 最短路径不是一道题,而是一组“按图条件选算法”的工程能力。本文按 ACERS 结构拆解 BFS(无权)/ Dijkstra(非负权)/ A(启发式)*,并给出你在关系图、推荐链路、路径解释里真正会用到的优化模板。 预计阅读时长:14~18 分钟 标签:图论、最短路径、BFS、Dijkstra、A* SEO 关键词:最短路径, BFS, Dijkstra, A*, 双向搜索, 多源 BFS 元描述:最短路径三件套工程指南:算法边界、复杂度、可运行代码、优化策略与实战场景。 目标读者 正在补图算法基础,希望形成可复用工程模板的学习者 做社交关系链路、推荐路径、图查询解释的后端/算法工程师 对 BFS、Dijkstra、A* 都“知道名字”,但选型和优化还不稳定的开发者 背景 / 动机 最短路径问题常见于: 社交网络里的最短关系链路(几跳可达) 推荐系统里的最小代价路径(多目标折中) 可解释系统里的“为什么推荐给你”路径展示 工程里最容易犯的错误是“只会一个算法硬套全部场景”: 用 BFS 跑加权图,结果错但不报错 用 Dijkstra 跑负权边,得到不可靠结果 用 A* 但启发函数不合格,性能退化成 Dijkstra 本质上,最短路径应先做 图条件分类,再做算法选型。 核心概念 算法 适用图 最优性条件 典型复杂度 关键词 BFS 无权图 / 等权图 按层首次到达即最短边数 O(V+E) queue, level Dijkstra 非负权图 堆顶弹出的节点距离已最优 O((V+E)logV) relaxation, min-heap A* 非负权图 + 启发式 h(n) 可采纳(不高估) 最坏同 Dijkstra,平均更快 f=g+h 关键公式: ...
副标题 / 摘要 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: ...