name: graph-algorithms description: “图数论中图算法的问题解决策略” allowed-tools: [Bash, Read]
图算法
何时使用
在图形数论中处理图算法问题时使用此技能。
决策树
-
遍历选择
- BFS: 最短路径(无权),层级结构
- DFS: 循环检测,拓扑排序,强连通分量
-
最短路径算法
算法 使用场景 复杂度 Dijkstra 非负权重 O((V+E) log V) Bellman-Ford 负权重 O(VE) Floyd-Warshall 所有对 O(V^3) -
最小生成树
- Prim’s: 稠密图,从顶点贪心
- Kruskal’s: 稀疏图,并查集
z3_solve.py prove "cut_property"
-
网络流
- 最大流 = 最小割(Ford-Fulkerson)
- 通过流网络匹配
sympy_compute.py linsolve "flow_conservation"
-
图属性
- 谱: 邻接矩阵的特征值
- 连通性: 通过DFS/BFS
- 着色: 贪心或SAT约简
工具命令
Sympy_Adjacency
uv run python -m runtime.harness scripts/sympy_compute.py eigenvalues "adjacency_matrix"
Z3_Dijkstra
uv run python -m runtime.harness scripts/z3_solve.py prove "d[v] >= d[u] + w(u,v) for all edges"
Z3_Mst_Cut
uv run python -m runtime.harness scripts/z3_solve.py prove "min_edge_crossing_cut_in_mst"
Sympy_Flow
uv run python -m runtime.harness scripts/sympy_compute.py linsolve "flow_conservation_equations"
关键技巧
来自索引教科书:
- [图论 (Graduate Texts in Mathematics (173))] 给定两个数值图不变量 i1 和 i2,写 i1 i2 如果我们能通过假设 i1(G) 足够大来强制 i2 在 G 的某个子图上任意高。形式上:写 i1 i2 如果存在一个函数 f : N → N 使得,对于任意 k ∈ N,每个具有 i1(G) f (k) 的图 G 都有一个子图 H 具有 i2(H) k。如果 i1 i2 以及 i1 i2,写 i1 ∼ i2。
- [图论 (Graduate Texts in Mathematics (173))] 找到最小的整数 b = b(k) 使得每个阶为 n、边数超过 kn + b 的图对于每个 k ∈ N 都有一个 (k + 1)-边连通子图。证明每棵树 T 至少有 Δ(T ) 个叶子。证明一棵没有度数为 2 的顶点的树的叶子数多于其他顶点数。
- [图论 (Graduate Texts in Mathematics (173))] 对于每个 n > 1,找到一个在 2n 个顶点上的二分图,以这样的方式排序,贪心算法使用 n 而不是 2 种颜色。练习 考虑以下顶点着色方法。首先,找到一个极大独立顶点集并用颜色 1 着色;然后在剩余图中找到一个极大独立顶点集并用颜色 2 着色,依此类推。
- [图论 (Graduate Texts in Mathematics (173))] 证明,对于每个 r ∈ N,每个具有上密度 s 的无限图对于每个 s ∈ N 都有一个 K r 子图。推导出无限图的上密度只能取可数多个值 0, 1, 1/2, 2/3, 3/4 极值图论 给定一棵树 T,找到一个对于 ex(n, T ) 的上界,该界是 n 的线性函数且独立于 T 的结构。证明 Erdős–Sós 猜想当考虑的树是星形的情况。
- [图论 (Graduate Texts in Mathematics (173))] 着色 稍一般地,一个图类 G 被称为 χ-有界如果存在一个函数 f : N → N 使得对于 G 中的每个图 G ⊇ Kr 有 χ(G) f ®。在这样的图中,那么我们可以通过使 χ 大于 f ® 来强制一个 Kr 子图。证明四色定理确实解决了本章第一句中陈述的地图着色问题。