Trees

Chapter 7
• Network Flow
April 28
Soviet Rail Network, 1955
Reference: On the history of the transportation and maximum flow problems.
Alexander Schrijver in Math Programming, 91: 3, 2002.
Maximum Flow and Minimum Cut
Max flow and min cut.
Two very rich algorithmic problems.
Cornerstone problems in combinatorial optimization.
Beautiful mathematical duality.



Nontrivial applications / reductions.
Data mining.
Open-pit mining.
Project selection.
Airline scheduling.
Bipartite matching.
Baseball elimination.
Image segmentation.
Network connectivity.















Network reliability.
Distributed computing.
Egalitarian stable matching.
Security of statistical data.
Network intrusion detection.
Multi-camera scene
reconstruction.
Many many more . . .
Minimum Cut Problem
Flow network.
Abstraction for material flowing through the edges.
G = (V, E) = directed graph, no parallel edges.
Two distinguished nodes: s = source, t = sink.
c(e) = capacity of edge e.




10
source
s
capacity
5
15
2
9
5
4
15
15
10
3
8
6
10
4
6
15
4
30
7
10
t
sink
Cuts
Def. An s-t cut is a partition (A, B) of V with s  A and t  B.
cap( A, B) 
Def. The capacity of a cut (A, B) is:
 c(e)
e out of A
Capacity = 10 + 5 + 15
= 30

10
s
5
2
9
5
4
15
15
10
3
8
6
10
4
6
15
4
30
7
A
15
10
t
Cuts
Def. An s-t cut is a partition (A, B) of V with s  A and t  B.
Def. The capacity of a cut (A, B) is: cap( A, B) 
 c(e)
e out of A
Capacity = 9 + 15 + 8 + 30
= 62

10
5
s
A
15
2
9
5
4
15
15
10
3
8
6
10
4
6
15
4
30
7
10
t
Minimum Cut Problem
Min s-t cut problem. Find an s-t cut of minimum capacity.
Capacity = 10 + 8 + 10
= 28
10
5
s
A
15
2
9
5
4
15
15
10
3
8
6
10
4
6
15
4
30
7
10
t
Minimum Cut Problem
Min s-t cut problem. Find an s-t cut of minimum capacity.
Suppose the edge capacity represents the cost of
removing the edge. What is the least expensive way to
disrupt connection from s to t? This is the min-cut
problem. Apparently, this is the version that
motivated researchers in Rand corporation with a
view of breaking down the Russian railway system.
10
5
s
A
15
Capacity = 10 + 8 + 10
= 28
2
9
5
4
15
15
10
3
8
6
10
4
6
15
4
30
7
10
t
Flows
Def. An s-t flow is a function that satisfies:
For each e  E:
0  f (e)  c(e)
For each v  V – {s, t}:
 f (e)   f (e)
(capacity)
(conservation)


e in to v
Def. The value of a flow
 f is:
e out of v
v( f ) 
 f (e) .
e out of s

0
4
10
2
9
4 4
0
15

0
5
s
5
0
15
0
4
4
3
8
10
6
0
capacity
15
flow
0
4 0
6
4
t
0
15
0
30
10
0
10
Value = 4
7
Flows
Def. An s-t flow is a function that satisfies:
For each e  E:
0  f (e)  c(e)
For each v  V – {s, t}:
 f (e)   f (e)
(capacity)
(conservation)


e in to v
Def. The value of a flow
 f is:

10
10
5
v( f ) 
 f (e) .
e out of s
6
2
9
4 4
0
15

3
s
e out of v
5
6
15
0
8
8
3
8
10
6
1
capacity
15
flow
11
4 0
6
4
t
10
15
11
30
10
0
10
Value = 24
7
Maximum Flow Problem
Max flow problem. Find s-t flow of maximum value.
10
5
s
10
2
9
4
15
3
8
5
9
1
15
10
6
10
9
10
9
0
0
15
4
flow
4
6
4
30
8
4
14
15
7
10
0
0
capacity
t
14
Value = 28
Java applet implementation:
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/MaxflowApp.shtml?demo5
What is the capacity of the cut < {s}, V \ {s} >?
12
Java applet implementation:
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/MaxflowApp.shtml?demo5
What is the capacity of the cut < {s}, V \ {s} >?
10
What is the capacity of the cut < V\ {v9, t}, {v9, t}>?
13
Java applet implementation:
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/MaxflowApp.shtml?demo5
What is the capacity of the cut < {s}, V \ {s} >?
10
What is the capacity of the cut < V\ {v9, t}, {v9, t}>?
8
14
Java applet implementation:
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/MaxflowApp.shtml?demo5
What is the capacity of the min-cut?
15
Java applet implementation:
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/MaxflowApp.shtml?demo5
What is the capacity of the min-cut?
It is not obvious! Can you find a cut of capacity 6?
16
Java applet implementation:
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/MaxflowApp.shtml?demo5
What is the capacity of the min-cut?
It is not obvious! Can you find a cut of capacity 6?
Answer: < {s, v1}, V \ {s, v1}>
Max-flow algorithm will find a cut of minimum capacity.
17
Flows and Cuts
Flow value lemma. Let f be any flow, and let (A, B) be any s-t cut. Then, the
net flow sent across the cut is equal to the amount leaving s.
 f (e)   f (e)  v( f )
e out of A

6
2
9
4 4
0
15
10
10
3
s
e in to A
5
5
6
15
0
8
8
3
A
8
10
6
1
15
4 0
11
6
4
t
10
15
11
30
10
0
10
Value = 24
7
Flows and Cuts
Flow value lemma. Let f be any flow, and let (A, B) be any s-t cut. Then, the
net flow sent across the cut is equal to the amount leaving s.
 f (e)   f (e)  v( f )
e out of A

6
2
9
4 4
0
15
10
10
3
s
e in to A
5
5
6
15
0
8
8
3
A
8
10
6
1
15
4 0
11
6
30
t
10
15
11
4
10
7
0
10
Value = 6 + 0 + 8 - 1 + 11
= 24
Flows and Cuts
Flow value lemma. Let f be any flow, and let (A, B) be any s-t cut. Then, the
net flow sent across the cut is equal to the amount leaving s.
 f (e)   f (e)  v( f )
e out of A

6
2
9
4 4
0
15
10
10
3
s
e in to A
5
5
6
15
0
8
8
3
A
8
10
6
1
15
4 0
11
6
30
t
10
15
11
4
10
7
0
10
Value = 10 - 4 + 8 - 0 + 10
= 24
Flows and Cuts
Flow value lemma. Let f be any flow, and let (A, B) be any s-t cut.
Then
 f (e)   f (e)  v( f ) .
e out of A
e in to A
v( f ) 

 f (e)
e out of s
Pf.
by flow conservation, all terms
except v = s are 0




   f (e)   f (e)

v  A e out of v
e in to v
 f (e)   f (e).
e out of A

e in to A
Flows and Cuts
Weak duality. Let f be any flow, and let (A, B) be any s-t cut.
Then the value of the flow is at most the capacity of the cut.
Cut capacity = 30 
10
s
5
Flow value  30
2
9
5
4
15
15
10
3
8
6
10
4
6
15
4
30
t
A
15
10
Capacity = 30
7
Flows and Cuts
Weak duality. Let f be any flow. Then, for any s-t cut
(A, B) we have v(f)  cap(A, B).
Pf.
v( f ) 
 f (e)   f (e)
e out of A

A
4
8
e in to A
 f (e)
e out of A

 c(e)
e out of A
 cap(A, B)
s
▪
7
6
B
t
Certificate of Optimality
Corollary. Let f be any flow, and let (A, B) be any cut.
If v(f) = cap(A, B), then f is a max flow and (A, B) is a min cut.
Value of flow = 28
Cut capacity = 28  Flow value  28
9
2
9
4
1
15
10
10
0
4
5
s
5
9
15
0
9
8
3
8
10
6
4
A
15
4 0
14
6
10
15
14
4
30
10
7
0
10
t
Towards a Max Flow Algorithm
Greedy algorithm.
Start with f(e) = 0 for all edge e  E.
Find an s-t path P where each edge has f(e) < c(e).
Augment flow along path P.
Repeat until you get stuck.




1
0
0
20
10
t
30 0
s
10
20
0
0
2
Flow value = 0
Towards a Max Flow Algorithm
Greedy algorithm.
Start with f(e) = 0 for all edge e  E.
Find an s-t path P where each edge has f(e) < c(e).
Augment flow along path P.
Repeat until you get stuck.




1
20 X
0
0
20
10
30 X
0 20
s
t
10
20
0
X
0 20
2
Flow value = 20
Towards a Max Flow Algorithm
Greedy algorithm.
Start with f(e) = 0 for all edge e  E.
Find an s-t path P where each edge has f(e) < c(e).
Augment flow along path P.
Repeat until you get stuck.




locally optimality  global optimality
1
20
20
s
0
10
20
20
t
30 20
10
0
greedy = 20
1
s
20
20
2
10
10
10
10
opt = 30
t
30 10
20
20
2
Residual Graph
Original edge: e = (u, v)  E.
Flow f(e), capacity c(e).

capacity
u
v
17
6
flow
Residual edge.
"Undo" flow sent.
e = (u, v) and eR = (v, u).
Residual capacity:

residual capacity


u
c(e)  f (e) if e  E
c f (e)  
if e R  E
f (e)
Residual graph: Gf = (V, Ef ).

Residual edges with positive residual capacity.
Ef = {e : f(e) < c(e)}  {eR : c(e) > 0}.


11
v
6
residual capacity
Ford-Fulkerson Algorithm
2
4
4
capacity
G:
s
10
2
8
6
10
10
3
9
5
10
t
Augmenting Path Algorithm
Augment(f, c, P) {
b  bottleneck(P)
foreach e  P {
if (e  E) f(e)  f(e) + b
else
f(eR)  f(e) - b
}
return f
}
forward edge
reverse edge
Ford-Fulkerson(G, s, t, c) {
foreach e  E f(e)  0
Gf  residual graph
while (there exists augmenting path P) {
f  Augment(f, c, P)
update Gf
}
return f
}
Max-Flow Min-Cut Theorem
Augmenting path theorem. Flow f is a max flow iff there are no augmenting
paths.
Max-flow min-cut theorem. [Ford-Fulkerson 1956] The value of the max
flow is equal to the value of the min cut.
Proof strategy. We prove both simultaneously by showing the TFAE:
(i) There exists a cut (A, B) such that v(f) = cap(A, B).
(ii) Flow f is a max flow.
(iii) There is no augmenting path relative to f.
(i)  (ii) This was the corollary to weak duality lemma.
(ii)  (iii) We show contrapositive.
Let f be a flow. If there exists an augmenting path, then we can improve f
by sending flow along path.

Proof of Max-Flow Min-Cut Theorem
(iii)  (i)
Let f be a flow with no augmenting paths.
Let A be set of vertices reachable from s in residual graph.
By definition of A, s  A.
By definition of f, t  A.




v( f ) 
 f (e)   f (e)
e out of A

e in to A
A
 c(e)
B
e out of A
t
 cap(A, B)
s

original network
Running Time
Assumption. All capacities are integers between 1 and C.
Invariant. Every flow value f(e) and every residual capacities cf (e) remains
an integer throughout the algorithm.
Theorem. The algorithm terminates in at most v(f*)  nC iterations.
Pf. Each augmentation increase value by at least 1. ▪
Corollary. If C = 1, Ford-Fulkerson runs in O(mn) time.
Integrality theorem. If all capacities are integers, then there exists a max
flow f for which every flow value f(e) is an integer.
Pf. Since algorithm terminates, theorem follows from invariant. ▪
7.3 Choosing Good Augmenting Paths
Ford-Fulkerson: Exponential Number of
Augmentations
Q. Is generic Ford-Fulkerson algorithm polynomial in input
size?
m, n, and log C
A. No. If max capacity is C, then algorithm can take C
iterations.
1
1
1
0
X
0
C
C
s
t
1 X
0 1
C
C
0
X0 1
2
1
X
0
0 1
X
C
C
1 0
1 X
0 X
s
t
C
C
X
0 1
0
1 X
2
Choosing Good Augmenting Paths
Use care when selecting augmenting paths.



Some choices lead to exponential algorithms.
Clever choices lead to polynomial algorithms.
If capacities are irrational, algorithm not guaranteed to terminate!
Goal: choose augmenting paths so that:


Can find augmenting paths efficiently.
Few iterations.
Choose augmenting paths with: [Edmonds-Karp 1972, Dinitz
1970]



Max bottleneck capacity.
Sufficiently large bottleneck capacity.
Fewest number of edges.