ch16

CS 361 – Chapter 16
• Final thoughts on minimum spanning trees and similar
problems
• Flow networks
• Commitment:
– Decide on presentation order
Flow network
• Special case of a weighted, directed graph
• Each edge has a flow and a capacity
– Ex. Edge label “3/5” means the flow is 3 and capacity is 5
• Something is flowing through the graph (oil, packets,
money, chocolate), from a source vertex to a sink vertex
– Source has in-degree 0
– Sink has out-degree 0
– Source and sink are unique
• The network must obey certain properties
– For each edge: flow  capacity
– For each vertex: in flow = out flow
except for source, sink
Observations
• Look at example, such as p. 446
• Representation?
Src
Src
V1
V2
V3
3/7
5/6
2/5
V1
1/1
V2
1/3
V3
V4
V5
sink
2/2
4/9
2/5
2/3
V4
4/6
V5
4/8
Sink
• No cycles!
Total flow
• A single edge e has a flow, f(e)
• The entire graph has a flow |f| = total flow coming out of
source, or going into sink
• Big question: what is the maximum flow we can have in
the network? Want a general algorithm.
• Ex. On page 446 has a max flow of 14. Why is 15 not
possible?
– At |f| = 14, source  v2 and source  v3 are maxed out.
– Source  v1 has a flow of only 3 out of 7. Why?
Cut
• Technique for finding maximum flow relies on notion of a
“cut” through the network.
• Cut = partition of the vertices into 2 sets.
– One partition contains the source; the other contains sink.
– Reminiscent of Prim’s algorithm, in which we temporarily
partition the graph into vertices already covered by spanning and
those not yet
– Boundary of partition “cuts” or crosses the graph at various
edges.
– Edges crossed can be classified as forward or backward. (most
are forward)
• Capacity of cut: add capacities only of forward edges
• Flow of cut: flow(forward) – flow(backward)
Cut properties
• Network’s total flow = flow across any cut: |f| = f(cut)
– Because source is on one side and sink is on other.
– You can make a “first cut” like this: (source, everybody else).
– Then, move a vertex from 2nd partition to the first. By
“conservation rule”, the flow across the cut is the same.
– Can continue moving cut thru the graph until 2nd partition has just
the sink.
• A cut’s flow can’t exceed its capacity: f(cut)  c(cut)
– Intutitive… simple algebra:
– To compute f(cut), we sum flows across all its edges:
|f| = f(cut) = sum(flows of forward) – sum(flows of backward)
|f| = f(cut)  sum(flows of forward)
 sum(capacities of forward) = sum(capacities of all edges)
• Insight: max flow  cut of min capacity.
Flow networks (2)
• Review description and properties
– cycles are allowed
• How to find maximum flow: Ford-Fulkerson algorithm
– Along the way, some helpful terminology
Residual capacity
• How much capacity is left on some edge
• Can be calculated once we are given some flow through
the network/graph
• RC(u, v) = capacity(u, v) – flow(u, v)
• Ex. If an edge is labeled “7/9”, the corresponding RC is
9 – 7 = 2.
• Can be zero, when we’ve maxed out capacity.
• If no edge from u to v, we say capacity(u, v) = 0
• Only needs to be calculated for vertices that are
adjacent.
Residual capacity (2)
• Example
15/20
a
b
• We calculate RC in both directions
In either case, RC = cap – flow:
– cap(a, b) = 20
cap(b, a) = 0
– flow(a, b) = 15
flow(b, a) = –15
– RC(a, b) = 5
RC(b, a) = 15
• Negative flow? Means the net flow is in the other
(opposite) direction.
• RC(a, b) = 5 means we can pump 5 more from a to b.
RC(b, a) = 15 means we can pump 15 less from a to b.
Residual network
• This is a weighted, directed graph (thus, another flow
network) computed based on original flow network.
• The RN will sit alongside the flow network to assist in
max flow computations later.
• Use all vertices from original graph.
• For all vertices u, v that are adjacent to each other, we
compute the RC, and only draw edges where RC is
positive.
– Often, RN will show edges going in both directions between
pairs of vertices.
• Examples
– Original edge “11/14”  RN will show edges 3 and 11.
– Original edges “1/4” and “0/10” other way  RN will show edges
3 and 11.
Augmenting path
• “Augmenting” happens to be at heart of max flow
algorithm.
• An augmenting path is a path from the source to the sink
in the residual network.
• We want to find the minimum residual capacity along this
path.
– This is the amount by which it’s safe to increase flow.
Algorithm
• Ford-Fulkerson is the basic technique for finding the
maximum flow. Further optimizations also exist.
• To begin, it doesn’t matter what the edge flows are. In
general, we can set them all to 0.
maxFlow(G):
set all edge flows in G to 0.
RN = compute the residual network of G.
while  path from source to sink in RN:
choose some path p from source to sink.
min = lowest edge weight along p.
Add min to edge flows along corresponding path in G.
for each edge (u, v) in p:
RN(u, v) -= min
RN(v, u) += min
// i.e. we recompute RN
Example
• Work out the max flow for this flow network:
src
src
v1
v2
0/16
0/13
v1
v2
v3
v4
0/10
v3
v4
sink
0/12
0/4
0/14
0/9
0/20
0/7
0/4
sink
• To begin, it turns out that the initial residual network (RN)
is just the set of capacities of the graph. Why?
• The routine is: Compute RN, find next augmenting path,
recompute G and RN, etc.
Bipartite matching
• Application of flow network
• The problem: you have a set of people, and a set of
jobs. Each person is certified to handle 1+ jobs, but can
only perform 1 job. Is there a way to assign jobs to
maximize how many jobs get done, e.g. all of them?
– Ex. P1  J1; P2  J1, J2; P3  J2, J3;
P4  J2, J3; P5  J3, J4, J5
• Introduce a source and sink vertex. 
• Many other problems require matching things in two
sets, and desiring the maximum number of matches.
What are some examples?
Circulation with demand
• Generalization of flow network
• What if we have multiple sources & sinks?
• Each vertex has a “demand” amount.
– Positive demand means you want to receive more flow than you
produce. Effectively, you are a sink.
– Negative demand means you want to produce more than you
receive. You are a source.
• What constraints do we have on such a network?
• The problem: see if there exists a way to set the flow on
each edge to satisfy all constraints. (Not interested in a
maximum)
Example
–3
1/3
2/3
2/2
–3
2
2/2
2/2
4
• We can convert this into an ordinary flow network, by
doing what?
• Then solve Ford-Fulkerson, but what should its
maximum flow be?
Airline scheduling
• Could the following flights all be accomplished by just 2
planes? (Assume all times are in same time zone)
–
–
–
–
–
–
BOS-DCA 6:00-7:00
PHL-PIT 7:00-8:00
DCA-LAX 8:00-11:00
PHL-SFO 11:00-14:00
SFO-SEA 14:30-15:30
SLC-SEA 17:00-18:00
• *** It’s possible to formulate this kind of problem as a
circulation with demand. 