1 FordFulkerson
1 FordFulkerson
Part 1 Part 2
• Graphs are directed and edges have “capacities” (weights)
• We have a special “source” vertex s and “sink” vertex t.
• s has only outgoing edges*
• t has only incoming edges*
3
4
4 2 6
6
2 4
s t
3
2 6
3 4
6
10
*at least for this class
An s-t cut
is a cut which separates s from t
3
4
4 2 6
6
2 4
s t
3
2 6
3 4
6
10
An s-t cut
is a cut which separates s from t
3
4
4 2 6
6
2 4
s t
3
2 6
3 4
6
10
An s-t cut
is a cut which separates s from t
• An edge crosses the cut if it goes from s’s side to t’s side.
3
4
4 2 6
6
2 4
s t
3
2 6
3 4
6
10
An s-t cut
is a cut which separates s from t
• An edge crosses the cut if it goes from s’s side to t’s side.
• The cost (or capacity) of a cut is the sum of the
capacities of the edges that cross the cut.
This cut has cost
3 4 + 2 + 10 = 16
4
4 2 6
6
2 4
s t
3
2 6
3 4
6
this edge does not
cross the cut; it’s going 10
in the wrong direction.
An minimum s-t cut
is a cut which separates s from t
with minimum capacity.
• Question: how do we find a minimum s-t cut?
This cut has cost
4 + 3 + 4 = 11
3
4
4 2 6
6
2 4
s t
3
2 6
3 4
6
10
Example where this comes up
• 1955 map of rail
networks from the Soviet
this says
Union to Eastern Europe.
“the bottleneck”
• Declassified in 1999.
• 44 edges, 105 vertices
3
2
2 4
4 1 6
2 6 1
4
2 4
s 1 2 t
3
2 6
3 4
6
The value of 10
this flow is 4.
A maximum flow
is a flow of maximum value.
• This example flow is pretty wasteful, I’m not utilizing
the capacities very well.
3
2
2 4
4 1 6
2 6 1
4
2 4
s 1 2 t
3
2 6
3 4
6
The value of 10
this flow is 4.
A maximum flow
is a flow of maximum value.
• This one is maximal.
• It has value 11.
3
3
3 4
4 6
4
2 6 1
2 4
s 2 3 4 t
3
5 2 1 6
3 4
6 4
5
10
That’s the same as the
minimum cut in this graph!
A maximum flow
is a flow of maximum value.
• This one is maximal.
• It has value 11.
3
3
3 4
4 6
4
2 6 1
2 4
s 1 3 4 t
3
6 2 2 6
3 4
6 4
6
10
Example
• 1955 map of rail
networks from the Soviet
Union to Eastern Europe.
• Declassified in 1999.
• 44 edges, 105 vertices
These numbers
are flows.
Schriver 2002
Theorem
Max-flow min-cut theorem
The value of a max flow from s to t Intuition: in a max flow,
is equal to the min cut better fill up,
and this is the bottleneck.
the cost of a min s-t cut.
3
3
3 4
4 6
4
2 6 1
2 4
s 2 3 4 t
3
5 2 1 6
3 4
6 4
5
10
Ford-Fulkerson algorithm
• Usually we state the algorithm first and then prove
that it works.
• Today we’re going to just start with the proof, and
this will inspire the algorithm.
Outline of algorithm:
• Start with zero flow
• We will maintain a “residual graph” Gf
• A path from s to t in Gf will give us a Assume for today that we
way to improve our flow. don’t have edges like this,
although it’s not necessary.
• We will continue until there are no s-t
paths left.
Tool: Residual networks
Say we have a flow � �, � − � �, � �� �, � ∈ �
�% �, � = ) � �, � �� �, � ∈ �
a 0 ����
2 �(�, �) is the flow on edge �, � .
c(�, �) is the capacity on edge �, �
•
•
2
3 6
4 1
t
s
8
1 3 2
a
b 3
Call the flow � 2
Call the graph � 0
1 5
1 t
Create a new residual s 7 1
network from this flow:
1 b 2
Call this graph �%
Tool: Residual networks
Say we have a flow
a
Forward edges are the
2 amount that’s left.
6
2 Backwards edges are the
3
4 1
amount that’s been used.
t
s
8
1 3 2
a
b 3
Call the flow �
2
Call the graph �
1 5
1 t
Create a new residual s 7 1
network from this flow:
1 b 2
Call this graph �%
Why do we care
about residual networks?
• t is not reachable from s in �% ⇔ f is a max flow.
Lemma:
2
2 3
3 6 2
4 1 1 5
t
s 8 s 1 t
1 3 2 7 1
Call the flow � 1 2
Call the graph � Call this graph �%
Why do we care
about residual networks?
• t is not reachable from s in �% ⇔ f is a max flow.
Lemma:
2
2 3
43 6 2
4 21 1 5
t
s 8 s 1 t
1 3 32 7 1
Call the flow � 1 2
Call the graph � Call this graph �%
Why do we care
about residual networks?
• t is not reachable from s in �% ⇔ f is a max flow.
Lemma:
Example:
To see that this flow is not
maximal, notice that we can Now we get this residual graph:
improve it by sending one
more unit more stuff along
this path:
2
2 4
43 6 2
4 21 0 4
t
s 8 s 2 t
1 3 32 7 0
Call the flow � 1 3
Call the graph � Call this graph �%
Why do we care
about residual networks?
• t is not reachable from s in �% ⇔ f is a max flow.
Lemma:
Example:
Now we get this residual graph:
Now we can’t reach t from s.
So the lemma says that f is a
max flow.
2
2 4
43 6 2
4 21
t 4
s 8 s 2 t
1 3 32 7
Call the flow � 1 3
Call the graph � Call this graph �%
Before: flow value is 2
2
2 1
1 6 2
4 1 3 5
t
s 3 s 1 t
1 3 0 3 3
Call the flow � 1
Call the graph � Call this graph �%
2 flow value is 3
2 2
12 6 2
4 10 2 6
s t
3 s t
1 3 01 3 2
Call the flow � 1 1
Call the graph � 1 in, 1 out Call this graph �%
• update �%
• return f
How do we choose which paths to use?
• The analysis we did still works no matter how we
choose the paths.
• That is, the algorithm will be correct if it terminates.
• However, the algorithm may not be efficient!!!
• May take a long time to terminate
• (Or may actually never terminate?)
3 1
4 5 3
1
s
2 t
4
5 2 3
1 4
1 5
5
Example of Ford-Fulkerson
3 3
4
4 1 3
4 6
s 2 2 3 4 4 t
3
5
3 1
6 4 4
5
10
3
1
4 5 3
1
s
2 t
3 4
5 2 4
1
1 5
5
Example of Ford-Fulkerson
3 3
4
4 1 3
4 6
s 2 2 3 4 4 t
3
5 Max flow and min
3 1 cut are both 11.
6 4 4
5
10
3
1
4 5 3
1
s
2 t
3 4
There’s no path 5 2 4
from s to t, and
1
1 5
here’s the cut to
prove it. 5
What have we learned?
• Max s-t flow is equal to min s-t cut!
• The USSR and the USA were trying to
solve the same problem…
• The Ford-Fulkerson algorithm can
find the min-cut/max-flow.
• Repeatedly improve your flow along
an augmenting path.
• How long does this take???
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
0
0
0 1
t
s
C
0 C 0
a
b
C
C
1 t
s
C C
b
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
0
0
0 1
t
s
C
0 C 0
a
b
C
C
1 t
s
C C
b
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
1
0
1 1
t
s
C
1 C 0
a 1
b
C
C-1
1
The edge (b,a) disappeared s 1 t
from the residual graph!
C
C-1 b
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
1
0
1 1
t
s
C
1 C 0
a 1
b
C
C-1
1
t
s 1
C
C-1 b
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
1
1
0 1
t
s
C
1 C 1
a 1
b 1
C-1 C-1
The edge (b,a) re-appeared 1 t
s 1 1
in the residual graph!
C-1 b
C-1
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
1
1
0 1
t
s
C
1 C 1
a 1
b 1
C-1 C-1
1 t
s 1 1
C-1 b
C-1
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
2
1
1 1
t
s
C
2 C 1
a 2
b 1
C-1 C-2
1
The edge (b,a) disappeared s 2 t
1
from the residual graph!
C-2 b
C-1
Why should we be concerned?
Suppose we just picked paths arbitrarily.
Choose a really
a
C big number C.
C
2
1 This will go on for C steps,
1 1 adding flow along (b,a) and
t
s
C then subtracting it again.
2 C 1
a 2
b 1
C-1 C-2
1
The edge (b,a) disappeared s 2 t
1
from the residual graph!
C-2 b
C-1
Doing Ford-Fulkerson with BFS is called
the Edmonds-Karp algorithm.
Theorem
• If you use BFS, the Ford-Fulkerson algorithm runs in
time O(nm2). Doesn’t have anything to do with the edge weights!
• Basic idea:
• The number of times you remove an edge from the residual
graph is O(n).
• This is the hard part
• There are at most m edges.
• Each time we remove an edge we run BFS, which takes time
O(n+m).
• Actually, O(m), since we don’t need to explore the whole graph, just
the stuff reachable from s.
One more useful thing
• If all the capacities are integers, then the flows in
any max flow are also all integers.
• When we update flows in Ford-Fulkerson, we’re only
ever adding or subtracting integers.
• Since we started with 0 (an integer), everything stays
integral.
But wait, there’s more!
• Min-cut and max-flow are not just useful for the
USA and the USSR in 1955.
• An important algorithmic primitive!
• The Ford-Fulkerson algorithm is the basis for many
other graph algorithms.
• For the rest of today, we’ll see a few:
• Maximum bipartite matching
• Integer assignment problems
Some of the following material shamelessly stolen from Jeff Erickson’s excellent lecture notes:
http://jeffe.cs.illinois.edu/teaching/algorithms/2009/notes/17-maxflowapps.pdf
Maximum matching in bipartite graphs
s t
1
1
1
1
s 1 t
1
1
1
1
1
1
3
3
3
1
1 1 10
5
10 3
10
This person is vegan 2
and not that hungry; 2
they only want two
6
scoops of the sorbet.
Stanford Students Tubs of ice cream
Solution via max flow
1
3
6
4
3 3
3
1
s 1 10
t
1
10
5
3
2
10 6
2
1
1
3 4
4 3 6
4
3 3
3 3
3 3
1
s 1 10
1 1 3 t
1
7 10 1
5
1 3
2 6
2
2 10 6
2 6
1 1
3 4
4 3 6
4
3 3
3 3 3
3
1
s 1 10
1 1 3 t
1
7 10 1
5 3
1
2 6
2
This student can 6
2 10
have flow at most
10 going in, and so 2 6
at most 10 going
out, so at most 10
scoops assigned.
As before, flows correspond to assignments, and
max flows correspond to max assignments.