上一篇文章我们提到了最小割问题,最小割问题在研究网络最薄弱环节相关问题上具备广泛应用。而这个问题如今也依旧是一个open problem。而今天我们就介绍一种求解最小割问题的概率型算法-Karger's algorithm。 该算法是karger读博期间发现的一种非常简单的算法。
其核心步骤就是我们随机在图上找两个点进行 constraction 合并操作。如下图所示:
注意2,3由于合并为了一个点,所以2 3两点之间的边我们就当做没有了,同时要消除由于合并形成的自环。
重复上述步骤到图只剩下两个点为止。
是的,这就是全部的步骤,是不是太简单了?同学们肯定好奇,这么简单,开玩笑,能有用吗?
接下来我们就分析一下这个算法到底能不能有用。
为了方便起见,我们就假设我们上面的分法就是最小割的情形了。红色虚线我们成为交叉边(cross edges),我们假设交叉边一共有k条, 总共的边一共是m条,即最小割为k。
Lemma 1:图中每个顶点的度至少为k。
Proof:一个顶点的度意为该顶点有多少条边。由于最小割为k,那么我们总能将图中的顶点分成这样的一种情况,即我们目标的顶点在A,其余剩下的点全部在B,由于最小割是k,所以该顶点至少有k条边。 证毕
我们继续考虑,什么情况下我们的算法能够成功呢?如果某一个步中我们constraction的边恰好是交叉边呢?显然,如果是这种情况,那么本来应该分别在A B中的点就会在同一边,算法失败。所以,算法成功的条件必须是每一步算法都选到不是交叉边的边合并。
Lemma 2:第一步成功的概率为
Proof: 共计m条边,其中k条是交叉边,我们是随机选择的。证毕