« previous | Friday, October 26, 2012 | next »
Minimum Cut Algorithm
Contract edges at random until two nodes remain.
def contract G
until g.vertices.size = 2
e = g.edges.sample
g /= e
end
g.edges.size
end
Count the number of edges remaining in the graph.
Minimum cut has fewest edges
between two partitions. The chances that we'll contract one of these edges (thus getting rid of it) are very low:
.
Analysis
Therefore
Let
be a loop-free connected multigraph with
vertices.
The program terminates after performing
contractions.
Suppose that
is a particular minimum cut of
.
Let
denote the event that the algorithm selects an edge in the
th iteration that does not cross the cut
. Therefore, the probability that no edge crossing the cut
is ever picked during an execution of the algorithm is
Suppose that the size of the minimum cut
is
. This means that the degree of each vertex is at least
; hence, there exists at least
edges.
The probability to select an edge crossing
in the first step is at most
.
Thus
At the beginning of the
th iteration, there are
remaining vertices. The minimum cut is tstill at least
, hence the graph at this stage has at least
edges.
Assuming none of the edges crossing
were picked in an earlier step, the probability to select an edge crossing
(unlucky) is at most
.
It follows that
Combining what we know,
Repeat the algorithm slightly more than
times, say
times, the algorithm will more than likely return the correct result.