瓶颈路证明
从删边形成切分出发,证明任意 MST 上的两点路径都是最小瓶颈路。
本文回答一个问题:最小生成树只要求整棵树的边权和最小,为什么它还能让任意两点之间路径上的最大边权最小?
算法背景见:最小生成树。这里仅展开瓶颈路性质的证明,不需要知道 MST 是由哪一种算法构造的。
要证明什么
设
路径的瓶颈值,是路径上最大的边权:
最小瓶颈路是使这个值尽量小的路径。我们要证明:对于原图中任意一条
因为
先抓住直觉:删边后,另一条路也得过河
从
把这两个部分想成河的两岸:任何从
如果整条替代路径的边都比
因此,真正需要比较的不是两条路径的总长度,而是一条被删的树边与一条替代的跨越边。
详细证明
1. 假设存在瓶颈更小的路径
从
假设存在另一条
这意味着
2. 删去树边,得到两部分
从
为什么
所以,
3. 替代路径必有一条跨越边
沿着
取其中一条跨越边
注意:
4. 换边,构造更轻的生成树
构造
删去
它的总权值满足
这与
为什么不怕同权边和多棵 MST
反证时假设的是“严格更小”。如果替代路径的瓶颈与树路径相同,就不会构造出总权值严格更小的生成树,也不会产生矛盾;两条路径都可以是最小瓶颈路。
证明只使用了
记住这条证明链
删最大边 → 两点分到两侧 → 更好的路径必有更轻的跨越边 → 换边后生成树更轻 → 矛盾。
这条推理把“两点路径是否最优”转成了“整棵生成树能否通过换边变得更轻”。
下面的图是假设存在更好路径时的局部示意:被删的树边权值为 10,假设路径中的跨越边权值为 5。如果真有这样的跨越边,原来的树就不可能是 MST,因为换边能降低总权值。
graph LR
%% 节点样式定义
classDef nodeStyle fill:#fff,stroke:#333,stroke-width:2px,color:black;
%% 左边的连通分量 Su
subgraph Su [集合 Su: 包含 u]
direction TB
u((u)):::nodeStyle
u_end[节点 X]:::nodeStyle
u_alt[节点 Y]:::nodeStyle
%% 内部连接 (边索引 0)
u === u_end
%% 内部连接 (边索引 1)
u -.- u_alt
end
%% 右边的连通分量 Sv
subgraph Sv [集合 Sv: 包含 v]
direction TB
v((v)):::nodeStyle
v_end[节点 Z]:::nodeStyle
v_alt[节点 W]:::nodeStyle
%% 内部连接 (边索引 2)
v_end === v
%% 内部连接 (边索引 3)
v_alt -.- v
end
%% 核心冲突边
%% (边索引 4) MST 上的最大边 e_max
u_end == "e_max (权值: 10)" ==> v_end
%% (边索引 5) 假设存在的更优边 e'
u_alt -. "e' (权值: 5)" .- v_alt
%% 样式应用
%% 0, 2 是 MST 的树枝,设为黑色粗线
linkStyle 0,2 stroke:black,stroke-width:3px;
%% 1, 3 是假设路径 P' 的一部分,设为蓝色虚线
linkStyle 1,3 stroke:blue,stroke-width:2px,stroke-dasharray: 5 5;
%% 4 是红色的瓶颈边 e_max
linkStyle 4 stroke:#ff0000,stroke-width:5px,color:red;
%% 5 是绿色的更优边 e'
linkStyle 5 stroke:#00cc00,stroke-width:4px,stroke-dasharray: 5 5,color:green;