我们在下面介绍并讨论了集合1中的Karger算法。
1) Initialize contracted graph CG as copy of original graph
2) While there are more than 2 vertices.
a) Pick a random edge (u, v) in the contracted graph.
b) Merge (or contract) u and v into a single vertex (update
the contracted graph).
c) Remove self-loops
3) Return cut represented by two vertices.
如前一篇文章所述,Karger的算法并非总能找到最小切割。在这篇文章中,讨论了找到最小切割的可能性。
Karger算法产生的割为Min-Cut的概率大于或等于1 /(n 2 )
证明:
假设给定图具有唯一的Min-Cut,并且Min-Cut中有C个边缘,且边缘为{e 1 ,e 2 ,e 3 ,.. e c }。当且仅当上述算法的主while循环中的集合{e 1 ,e 2 ,e 3 ,.. e c }中的所有边缘均未去除时,Karger算法才会产生此Min-Cut。
c is number of edges in min-cut
m is total number of edges
n is total number of vertices
S1 = Event that one of the edges in {e1, e2,
e3, .. ec} is chosen in 1st iteration.
S2 = Event that one of the edges in {e1, e2,
e3, .. ec} is chosen in 2nd iteration.
S3 = Event that one of the edges in {e1, e2,
e3, .. ec} is chosen in 3rd iteration.
..................
..................
The cut produced by Karger's algorithm would be a min-cut if none of the above
events happen.
So the required probability is P[S1' ∩ S2' ∩ S3' ∩ ............]
在第一次迭代中选择最小切割边的可能性:
Let us calculate P[S1']
P[S1] = c/m
P[S1'] = (1 - c/m)
Above value is in terms of m (or edges), let us convert
it in terms of n (or vertices) using below 2 facts..
1) Since size of min-cut is c, degree of all vertices must be greater
than or equal to c.
2) As per Handshaking Lemma, sum of degrees of all vertices = 2m
From above two facts, we can conclude below.
n*c <= 2m
m >= nc/2
P[S1] <= c / (cn/2)
<= 2/n
P[S1] <= c / (cn/2)
<= 2/n
P[S1'] >= (1-2/n) ------------(1)
在第二次迭代中选择最小切割边的可能性:
P[S1' ∩ S2'] = P[S2' | S1' ] * P[S1']
In the above expression, we know value of P[S1'] >= (1-2/n)
P[S2' | S1'] is conditional probability that is, a min cut is
not chosen in second iteration given that it is not chosen in first iteration
Since there are total (n-1) edges left now and number of cut edges is still c,
we can replace n by n-1 in inequality (1). So we get.
P[S2' | S1' ] >= (1 - 2/(n-1))
P[S1' ∩ S2'] >= (1-2/n) x (1-2/(n-1))
在所有迭代中选择最小切割边的可能性:
P[S1' ∩ S2' ∩ S3' ∩.......... ∩ Sn-2']
>= [1 - 2/n] * [1 - 2/(n-1)] * [1 - 2/(n-2)] * [1 - 2/(n-3)] *...
... * [1 - 2/(n - (n-4)] * [1 - 2/(n - (n-3)]
>= [(n-2)/n] * [(n-3)/(n-1)] * [(n-4)/(n-2)] * .... 2/4 * 2/3
>= 2/(n * (n-1))
>= 1/n2
如何增加成功的可能性?
上述基本算法成功的可能性很小。例如,对于具有10个节点的图,找到最小切割的概率大于或等于1/100。可以通过重复运行基本算法并返回找到的所有割点的最小值来增加概率。
应用范围:
1)在战争情况下,一个政党有兴趣寻找破坏敌人通信网络的最小链接数。
2)最小割问题可用于研究网络的可靠性(可能出现故障的最小边缘数量)。
3)研究网络优化(找到最大流量)。
4)聚类问题(诸如关联规则之类的边缘)匹配问题(有向图中最小割的NC算法将导致二部图中最大匹配的NC算法)
5)匹配问题(针对有向图的最小割的NC算法将导致二部图中最大匹配的NC算法)
资料来源:
https://www.youtube.com/watch?v=-UuivvyHPas
http://disi.unal.edu.co/~gjhernandezp/psc/lectures/02/MinCut.pdf