Questions in black, solutions in blue.
Our analysis of max flows and min cuts last week leads to an algorithm (called the Ford-Fulkerson method) for finding max flows in a flow diagram. The residual graph for a flow is the flow diagram that labels each edge with the capacity in each direction, if any, not used by the flow. For example, if an edge can take from 0 to 6 units in one direction and 4 are currently going across it, the residual graph shows 2 units in the forward direction and 4 in the backward direction.
An augmenting path is a path of non-zero edges in the residual graph. If there is an augmenting path, we can increase the flow along it by an amount equal to its lowest-labeled edge. (If there is no augmenting path, then there is a cut equal to the flow capacity and the flow is maximum.) The Ford-Fulkerson method is to keep finding an augmenting path and increasing the flow as long as you can. It always works on integer flows, but not always quickly:
1000 1000
------>(2)------
/ ^ \
/ | \
/ | v
>(1) 1| ((4))
\ | ^
\ | /
\ 1000 | 1000 /
------>(3)------
The first residual graph is identical to the original diagram above, because
it is the residual for a zero flow.
The first augmenting path goes from 1 to 3 to 2 to 4, and has size 1 because
there is capacity 1 in the residual graph from 3 to 2.
The second residual graph has capacity 1000 from 1 to 2, 999 from 1 to 3,
1 from 2 to 3 (because the current flow of 1 from 3 to 2 could be
decreased by 1), 999 from 2 to 4, and 1000 from 3 to 4. The second
augmenting path has size 1 and goes from 1 to 2 to 3 to 4.
(Note: Actually the first residual graph has edges with capacity 1 from
3 to 1 and from 4 to 2 as well as the edges I named. Below, whenever I say
the residual from 1 to 2, for example, is x, remember that there is also an
edge in the residual graph from 2 to 1 with capacity 1000-x.)
The new flow has 1 unit going from 1 to 2 to 4 and 1 unit going from 1 to
3 to 4. The new residual graph looks like the diagram above except that the
four 1000 edges now have residual capacity 999 each. Our third augmenting
path is exactly like the first, and the fourth is exactly like the second,
leading to a flow of 2 over each of the four outer edges and a residual graph
with 998 on each outer edge and still 1 from 2 to 3. We choose 998 more pairs
of augmenting paths, with the first in each pair going from 1 to 3 to 2 to 4
and the second in each pair going from 1 to 2 to 3 to 4. After all 2000 paths
we have a total flow of 2000, with 1000 units going from 1 to 2 to 4 and 1000
going from 1 to 3 to 4. The final residual graph has an edge on size 1 from
3 to 2, and backward edges of size 1000 from 2 to 1, from 3 to 1, from 4 to 2,
and from 4 to 3. Since in this graph there is no path from 1 to 4, we have
achieved the maximum flow, though in a very time-consuming way.
Use breadth-first search on the residual graph, ignoring the weights. This will take O(e+n) = O(e) time and will find a path from the source to the sink, if any such path exists, using as few edges as possible.
If each of the e edges is filled at most n times and each iteration of Edmonds-Karp fills at least one edge, then there can be at most ne iterations. Since each iteration takes O(e) time, we have a total time of O(ne2) for the algorithm.
Our flow diagram will have one vertex for each vertex of the bipartite graph
plus two more vertices, the source s and the sink t. Let L and R be the two
components of the bipartite graph, or more precisely any two disjoint sets that
union to the vertices of the bipartite graph such that any edge goes between a
vertex in L and one in R. Make an edge of size 1 from s to each vertex in L.
Make a directed edge from the L-vertex to the R-vertex for each edge of the
bipartite graph, also of weight 1. Make an edge of size 1 from each vertex
of R to t.
Now any flow in this diagram corresponds to a matching in the bipartite
graph, and the size of the flow is exactly the number of edges in the matching.
(It is clear from the operation of the Ford-Fulkerson method that the eventual
maximal flow will have an integer number of units passing over each edge, so
each edge of the bipartite graph is either fully used or not used.) The
maximum flow thus gives us a maximum matching.
Last modified 1 December 2003