最小生成树算法详解
1. 最小连通子图问题
在网络安装等实际问题中,我们常常会遇到寻找最小连通子图的问题。正式地表述为:给定一个连通图 $G = (V, E)$,以及边的权重函数 $w : E → Z$,我们要找到一个连通子图 $H = (V, F)$,使得 $\sum_{e∈F} w(e)$ 最小,这就是最小连通子图问题(MCS)。
由于边集 $E$ 有 $2^{|E|}$ 个子集,对于稍大一些的图,通过枚举所有子集来寻找解决方案是不现实的。因此,我们需要更高效的方法。
我们可以先从一个空图开始,逐步添加最便宜的边,直到图连通。不过,这种方法可能会添加一些不必要的边,因为这些边可能会与子图中已有的边形成回路,而我们的交互式算法会拒绝这些边。
实际上,当边的权重为非负时,最优解中不会包含回路。下面给出证明:
假设 $F$ 是使用最少边数的解,即 $|F|$ 最小。若 $F$ 包含回路 $e_1, \ldots, e_k$,那么在 $F$ 中使用 $e_1$ 的任何链中,根据遍历 $e_1$ 的方向,都可以用 $e_2, \ldots, e_k$ 或 $e_k, e_{k - 1}, \ldots, e_2$ 替换 $e_1$,从而得到具有相同端点的链。所以,$\tilde{H} = (V, F \setminus e_1)$ 是连通的。
因为 $F$ 是问题 1 的解,所以有 $\sum_{e∈F} w(e) \leq \sum_{e∈F\setminus{e_1}} w(e)$,即 $w(e_1) \leq 0$。又因为 $w$ 是非负的,所以 $w(e_1) = 0$。但这样一来,$F \setminus {e_1}$ 也是一个解,这与
超级会员免费看
订阅专栏 解锁全文
1559

被折叠的 条评论
为什么被折叠?



