COMP5270 Week 5 总结:Graph Algorithms(题解 + 知识点)
课程: COMP5270 - Randomness, Probability, and Algorithms
学期: S1 2026
来源: Week 5 - Graph algorithms, Week 5 - Tutorial 5 (Solutions)
Part 1: Tutorial 5 详细题解
Warm-up
Problem 1: 无向图有多少个不同 cut?
题目: 解释为什么
题解:
一个 cut 本质上是把顶点集
其中
所有子集一共有
:另一边是 ,不是两个非空部分; :另一边是空集。
所以合法子集数是:
但是 cut 没有方向,
结论:
本题用到的知识点:
- cut 是顶点集的二分 partition。
与 表示同一个无向 cut。 - 子集计数时要去掉空集和全集,再除以 2。
Problem 2: Karger-Stein 的运行时间和成功概率递推
题目: 求 Karger-Stein algorithm 的两个 recurrence:运行时间递推和成功概率递推。
题解:
Karger-Stein 的思想是:不要把 Karger contraction 一路做到 2 个点,因为最后几步杀掉 min-cut 的概率太高。它先收缩到大约
个顶点,然后递归跑两次,最后取较小 cut。
1. 运行时间递推
每一层做两次 ModifiedKarger,每次 contraction 总成本是
展开:
再展开一层:
注意:
所以每一层贡献都是
2. 成功概率递推
设
单个分支成功概率至少:
两个分支独立,最终失败当且仅当两个分支都失败,因此:
课程证明这个递推给出:
所以单次 Karger-Stein 比 basic Karger 的
本题用到的知识点:
- Karger-Stein 停在
规模后递归。 - 运行时间递推
。 - min-cut 存活概率乘法分析。
- 两次递归用“两个都失败”的补事件分析成功概率。
Problem 3: Karger-Stein 改成 1 次或 3 次递归会怎样?
题目: 如果 Karger-Stein 每层只做 1 次递归而不是 2 次,会发生什么?如果做 3 次呢?
题解:
1. 只做 1 次递归
如果每层只保留一个递归分支,那么算法大致变成“跑 basic Karger,只是每隔一段检查一次”。它没有利用“两条独立递归路径降低失败概率”的结构。
成功概率会在每层乘上约
运行时间会更低,但成功概率明显变差。
2. 做 3 次递归
若每层做 3 次 ModifiedKarger 和 3 次递归,运行时间递推变成:
用 Master-style 展开。第
深度是
这等于:
因为
成功概率会变好,因为现在需要 3 个分支全失败才失败;但运行时间更大。
本题用到的知识点:
- Karger-Stein 的递归次数直接影响时间递推。
型递推的层级展开。 - 多分支随机算法用补事件分析成功概率。
Problem Solving
Problem 4: 在 时间均匀随机采样一条边
题目: 给定 multigraph
题解:
关键是:均匀采样 edge 不能简单地均匀采样 vertex 后再均匀采样邻边,因为高/低度顶点被选中的概率不同。正确方法要让每条边最终概率相同。
方法 1: 按 degree 加权采样端点
设顶点
采样一个顶点
考虑任意边
因为无向图中:
所以:
每条边概率相同,所以是均匀采样。
时间复杂度
如果 degree 可
因此总时间:
adjacency matrix 的 rejection sampling 版本
如果图连通,则
本题用到的知识点:
- Handshaking lemma:
。 - 按 degree 加权采样可以抵消后续
。 - rejection sampling 的期望时间等于命中概率的倒数。
Problem 5: -Min-Cut 的 Karger 推广
题目:
- 改造 basic Karger algorithm;
- 分析成功概率和运行时间;
- 给出
-min-cuts 数量上界。
题解:
这里把
a) 算法
basic Karger 对 2-cut 是一直 contract 到 2 个 supervertices。对
但为了保证成功概率更容易分析,solution 中使用:
- 随机 contract 边,直到剩下
个顶点; - 在
个顶点上 brute force 枚举所有 -partition; - 返回其中 cut value 最小的那个。
因为
b) 成功概率
设固定的 optimal
其 cut size 是
在某一步,当前图有
直觉是:把当前顶点分成若干个大小最多为
因此当前一步选中坏边的概率满足:
所以存活概率至少是:
整理后可得:
所以重复
次,取最小 cut,即可让失败概率降到
每次 contraction 到
对常数
c) -min-cuts 个数上界
如果某个固定 optimal
更精细的分析可以把存活概率写成约
本题用到的知识点:
- Karger contraction 的成功条件:不 contract 目标 cut 的边。
- 用 minimum cut 性质推出 degree/edge 数下界。
- 概率乘法链:每一步条件存活概率相乘。
- 由算法输出概率推出结构性定理:minimum cuts 数量上界。
Problem 6: 随机权重 MST 算法等价于 Karger
题目: 给每条边独立赋一个
题解:
这个算法看起来像 MST,但本质上是在用 Kruskal 模拟 Karger contraction。
1. 随机权重给出随机 edge ordering
每条边的权重独立连续均匀,因此几乎不会打平。按权重从小到大排序,就是对所有边的一个 uniformly random permutation。
Kruskal 按这个随机顺序扫描边:
- 如果边连接两个不同 component,就加入 MST;
- 如果边在同一 component 内,就跳过,因为会形成 cycle。
2. Kruskal 的“加入边”对应 contraction
Karger 每一步均匀随机选一条当前 multigraph 的边并 contract。
在 Kruskal 中:
- 若当前扫描到的边连接两个不同 component,它就把两个 component 合并;
- 这正是 contraction;
- 若边在同一个 component 内,它相当于 contraction 后形成的 self-loop,应被忽略。
因为剩余边的相对顺序仍然是 uniformly random,所以每一步等价于在当前图中均匀随机选一条可 contraction 的边。
3. 为什么删去 MST 最大边得到 cut?
Kruskal 最终会选出
Kruskal 多做了最后一次,把两个 component 合成一个 spanning tree。删去 MST 中最后加入的那条边,即最大权重边,就回到 Karger 停在两个 component 的状态。
因此返回的 cut 分布与 basic Karger 相同。
4. 时间复杂度
实现方式:
- 给每条边生成随机权重:
; - 按权重排序:
; - Kruskal + union-find:
,被排序主导。
总时间:
本题用到的知识点:
- 连续独立随机权重诱导 uniformly random ordering。
- Kruskal 的 component merge 等价于 contraction。
- MST 去掉最大边得到两个 component。
- Kruskal 复杂度由排序
主导。
Advanced
Problem 7: 加权图上的 Karger / Karger-Stein
题目: 证明 Karger 算法可以修改为适用于非负加权无向图。Karger-Stein 也同理。
题解:
非加权图中,每条边被均匀选中。加权图中,一个自然的修改是:按边权比例采样边。
对当前图
然后 contract 这条边。
设固定的最小加权 cut 为
算法失败的唯一方式仍然是 contract 到 cut 中的边。当前一步选到 cut 边的概率是:
因为
因此:
这与非加权 Karger 的关键不等式完全相同。后续概率乘法不变:
Karger-Stein 的分析也只用到“每一步杀掉 cut 的概率
本题用到的知识点:
- 加权 contraction 中按
采样边。 - minimum weighted cut 推出所有 weighted degree 至少为 cut weight。
- Karger 分析本质只需要每一步 bad probability 上界。
- Karger-Stein 对加权图同样适用。
Part 2: Week 5 讲义知识点
0. 基础版导读:这周到底在学什么?
Week 5 的主题是 随机化图算法。这周不是只背 Karger 或 MST 的步骤,而是训练一种分析方式:
随机做一个看起来危险的操作,然后证明它破坏最优解的概率不大。
这周有两条主线:
- Minimum cut:用随机 contraction 找最小割。
- Minimum spanning tree (MST):用随机采样和 cut/cycle property 删除不可能属于 MST 的边。
先把图论语言统一:
- 图记作
, 是顶点集合, 是边集合。 , 。 - 一个 cut 是把顶点分成两边,例如
。 - 一条边如果一端在
,另一端在 ,就 crossing this cut。 - cut 的大小是 crossing edges 的数量;加权图中是 crossing edges 的权重和。
- Min-cut 是大小最小的 cut,记它的值为
。
Karger contraction 的核心直觉
Karger 算法反复做 edge contraction:
- 均匀随机选一条边
。 - 把
和 合并成一个 supervertex。 - 删除 self-loops,但保留 parallel edges。
- 重复到只剩两个 supervertices。
最后两个 supervertices 对应原图顶点的一种划分,因此输出一个 cut。
分析时固定一个真正的 min-cut
每一步都没有选到目标 min-cut 的 crossing edge。
这就是这周最重要的证明角度:不直接证明“算法聪明地找到了答案”,而是证明“随机过程有一定概率没有毁掉某个固定最优解”。
Karger 成功概率为什么是 ?
假设当前还有
于是当前边数满足:
危险边只有
安全概率至少是:
从
这个概率不大,但它是多项式小,不是指数小。于是重复
Karger-Stein 为什么要分支递归?
Basic Karger 最危险的是后半段:点越少,每一步选中 min-cut
边的概率越高。Karger-Stein 的想法是先只 contract 到约
你可以把它理解成:
- 前半段 contraction 很便宜,而且成功概率还不错。
- 后半段风险大,所以不只赌一次,而是分成两个分支。
- 两个分支只要有一个成功,整体就成功。
因此成功概率递推形如:
其中
MST 部分要先掌握两个 property
MST 是 Minimum Spanning Tree,目标是在连通加权图中选
两个基本性质必须会用:
Cut property:对任意 cut,跨过这个 cut 的最轻边一定可以出现在某棵 MST 中。
Cycle property:对任意 cycle,cycle 上最重的边一定不需要出现在 MST 中。
Kruskal、Prim、Boruvka 和 Karger-Klein-Tarjan 都是在不同方式下利用这两个性质。
-heavy edge 的直觉
假设
根据 cycle property,
KKT MST 算法的核心可以粗略理解成:
- 随机抽样一部分边。
- 在抽样图上递归求一个 MST/forest。
- 用这个 forest 判断原图中哪些边是 heavy。
- 批量删除这些不可能属于 MST 的边。
所以这部分不是要你死记复杂递归,而是要看懂:随机采样给出一个参照 forest,cycle property 让我们安全删边。
做题时怎么判断用哪个工具?
- 题目问 contraction 成功概率:固定一个 min-cut,计算每轮不选 cut edge 的概率。
- 题目问重复次数:用
。 - 题目问 min-cuts 数量上界:用“每个 min-cut 被输出的概率至少某个值,总概率不超过 1”。
- 题目问加权图:把“边数”换成“权重和”,危险概率用 cut weight / total weighted degree。
- 题目问 MST 边能否删除:优先想 cycle property。
- 题目问某条边是否必须能加入 MST:优先想 cut property。
1. Min-Cut 与 contraction
Min-Cut 问题:给定连通无向图
最小。
Edge contraction 是把一条边
如果 contraction 最后剩下两个 supervertices,它们对应原图顶点集的一个 partition,也就是一个 cut。
2. Basic Karger 算法
算法:
- 当
时: - 均匀随机选择一条边;
- contract 这条边;
- 返回最后两个 supervertices 定义的 cut。
单次运行时间:
因为每次 contraction 可
3. Karger 的成功概率
固定一个 minimum cut
若当前还剩
所以:
当前 contract 到
存活概率:
因此:
重复
总时间:
4. Karger-Stein
Karger basic 的问题在最后几步:当只剩 3 个点时,最后一步杀掉 min-cut
的概率上界达到
Karger-Stein 的修正:
- 只 contract 到约
个点; - 独立做两次;
- 对两个子图递归;
- 返回更小的 cut。
核心结果:
单次成功率:
重复放大后:
时间可获得
5. Minimum cuts 数量上界
Karger analysis 不只证明算法成功,也给出结构性定理。
若图中有
这些输出事件互斥,所以:
即:
这个界是 tight 的:cycle graph
6. MST 与 Karger-Klein-Tarjan
Week 5 后半介绍 randomized expected linear time MST。
经典 deterministic MST:
- Kruskal:
; - Prim:
; - Boruvka:
; - 更高级算法接近线性,但很复杂。
Karger-Klein-Tarjan 给出 expected:
7. MST 的 cut property 与 cycle property
Cut property: 对任意
Cycle property: 任意 cycle 中最重边一定不在 MST 中。
这两个性质是 Kruskal、Prim、Boruvka 和 KKT 的基础。
8. -heavy
edges
给定 forest
由 cycle property:
所以可以安全删除所有
9. KKT MST 的三个 building blocks
- MSTVerification: 给定
和 forest ,线性时间找出所有 -heavy edges。
- Random Subsampling Lemma: 每条边以概率
保留得到 ,令 为 的 MSF,则原图中非 -heavy 的边期望至多:
- Boruvka
steps: 每轮每个 component 选择 incident 最轻边并 contract。 轮后顶点数至少缩小 倍:
10. KKT 算法流程
- 运行若干轮 Boruvka,缩小顶点数;
- 随机 subsample 边;
- 递归求 sampled graph 的 MSF
; - 用
找原图中的 heavy edges 并删除; - 对剩余图递归求 MSF;
- 加上 Boruvka 阶段收缩的边,得到 MST。
设置
随机性只影响运行时间,不影响正确性;因此这是 Las Vegas 风格算法。
本周核心记忆
| 主题 | 关键结论 |
|---|---|
| cut 数量 | 所有 cut 有 |
| Basic Karger | |
| 放大 Karger | |
| Karger-Stein | |
| min-cuts 数量 | 最多 |
| weighted Karger | 按边权比例采样 |
| MST cut property | cut 上最轻边在 MST 中 |
| MST cycle property | cycle 上最重边不在 MST 中 |
| KKT MST | expected |