![Page 1: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/1.jpg)
MAX FLOWCS302, Spring 2013 David Kauchak
![Page 2: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/2.jpg)
Admin
![Page 3: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/3.jpg)
Max Power
http://www.youtube.com/watch?v=vDA-SAwz2VQ
![Page 4: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/4.jpg)
Student networking
You decide to create your own campus network: You get three of your friends and string some network cables Because of capacity (due to cable type, distance, computer,
etc) you can only send a certain amount of data to each person
If edges denote capacity, what is the maximum throughput you can you send from S to T?
S
A
B
T
20
2010
10
30
![Page 5: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/5.jpg)
Student networking
S
A
B
T
20/20
20/2010/10
10/10
10/30
30 units
You decide to create your own campus network: You get three of your friends and string some network cables Because of capacity (due to cable type, distance, computer,
etc) you can only send a certain amount of data to each person
If edges denote capacity, what is the maximum throughput you can you send from S to T?
![Page 6: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/6.jpg)
Another flow problem
S
A
B
T
10
910
4
2
C
D
6
10
10
8
How much water flow can we continually send from s to t?
![Page 7: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/7.jpg)
Another flow problem
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
14 units
![Page 8: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/8.jpg)
Flow graph/networks
S
A
B
T
20
2010
10
30
Flow network directed, weighted graph (V, E) positive edge weights indicating the “capacity”
(generally, assume integers) contains a single source s V with no incoming
edges contains a single sink/target t V with no outgoing
edges every vertex is on a path from s to t
![Page 9: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/9.jpg)
Flow
What are the constraints on flow in a network?
S
A
B
T
20
2010
10
30
![Page 10: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/10.jpg)
Flow
in-flow = out-flow for every vertex (except s, t)
flow along an edge cannot exceed the edge capacity
flows are positive
S
A
B
T
20
2010
10
30
![Page 11: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/11.jpg)
Max flow problem
Given a flow network: what is the maximum flow we can send from s to t that meet the flow constraints?
S
A
B
T
20
2010
10
30
![Page 12: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/12.jpg)
Applications?
network flow water, electricity, sewage, cellular… traffic/transportation capacity
bipartite matching
sports elimination
…
![Page 13: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/13.jpg)
Max flow origins
Rail networks of the Soviet Union in the 1950’s
The US wanted to know how quickly the Soviet Union could get supplies through its rail network to its satellite states in Eastern Europe.
In addition, the US wanted to know which rails it could destroy most easily to cut off the satellite states from the rest of the Soviet Union.
These two problems are closely related, and that solving the max flow problem also solves the min cut problem of figuring out the cheapest way to cut off the Soviet Union from its satellites.
Source: lbackstrom, The Importance of Algorithms, at www.topcoder.com
![Page 14: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/14.jpg)
Algorithm ideas?
graph algorithm? BFS, DFS, shortest paths… MST
divide and conquer?
greedy?
dynamic programming?
S
A
B
T
20
2010
10
30
![Page 15: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/15.jpg)
Algorithm idea
S
A
B
T
20
2010
10
30
![Page 16: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/16.jpg)
Algorithm idea
S
A
B
T
20/20
20/2010
10
20/30
send some flow down a path
![Page 17: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/17.jpg)
Algorithm idea
S
A
B
T
20/20
20/2010/10
10
20/30
send some flow down a path
Now what?
![Page 18: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/18.jpg)
Algorithm idea
S
A
B
T
20/20
20/2010/10
10/10
10/30
reroute some of the flow
Total flow?
![Page 19: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/19.jpg)
Algorithm idea
S
A
B
T
20/20
20/2010/10
10/10
10/30
reroute some of the flow
30
![Page 20: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/20.jpg)
Algorithm idea
S
A
B
T
10
910
4
2
C
D
6
10
10
8
![Page 21: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/21.jpg)
Algorithm idea
S
A
B
T
8/10
910
4
2
C
D
6
10
8/10
8/8
send some flow down a path
![Page 22: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/22.jpg)
Algorithm idea
S
A
B
T
10/10
910
2/4
2
C
D
6
2/10
8/10
8/8
send some flow down a path
![Page 23: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/23.jpg)
Algorithm idea
S
A
B
T
10/10
2/92/10
2/4
2
C
D
6
2/10
10/10
8/8
send some flow down a path
![Page 24: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/24.jpg)
Algorithm idea
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
reroute some of the flow
![Page 25: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/25.jpg)
Algorithm idea
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Are we done?Is this the best we can do?
![Page 26: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/26.jpg)
Cuts
A cut is a partitioning of the vertices into two sets A and B = V-A
A
B D
C
4
1
23
4F
E
54
6
4
![Page 27: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/27.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
In flow graphs, we’re interested in cuts that separate s from t, that is s A and t B
![Page 28: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/28.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
The flow “across” a cut is the total flow from nodes in A to nodes in B minus the total from from B to A
What is the flow across this cut?
![Page 29: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/29.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
The flow “across” a cut is the total flow from nodes in A to nodes in B minus the total from from B to A
10+10-6 = 14
![Page 30: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/30.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Consider any cut where s A and t B, i.e. the cut partitions the source from the sink
What do we know about the flow across the any such cut?
![Page 31: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/31.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Consider any cut where s A and t B, i.e. the cut partitions the source from the sink
The flow across ANY such cut is the same and is the current flow in the network
![Page 32: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/32.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Consider any cut where s A and t B, i.e. the cut partitions the source from the sink
4+10 = 14
![Page 33: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/33.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Consider any cut where s A and t B, i.e. the cut partitions the source from the sink
4+6+4 = 14
![Page 34: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/34.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Consider any cut where s A and t B, i.e. the cut partitions the source from the sink
10+10-6 = 14
![Page 35: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/35.jpg)
Flow across cuts
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Consider any cut where s A and t B, i.e. the cut partitions the source from the sink
The flow across ANY such cut is the same and is the current flow in the network
Why? Can you prove it?
![Page 36: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/36.jpg)
Flow across cuts
The flow across ANY such cut is the same and is the current flow in the network
Inductively?
every vertex is on a path from s to t in-flow = out-flow for every vertex (except s, t) flow along an edge cannot exceed the edge
capacity flows are positive
![Page 37: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/37.jpg)
Flow across cuts
The flow across ANY such cut is the same and is the current flow in the network
Base case: A = s
- Flow is total from from s to t: therefore total flow out of s should be the flow
- All flow from s gets to t- every vertex is on a path from s
to t- in-flow = out-flow
![Page 38: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/38.jpg)
Flow across cuts
The flow across ANY such cut is the same and is the current flow in the network
Inductive case: Consider moving a node x from A to B
Is the flow across the different partitions the same?
x
![Page 39: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/39.jpg)
Flow across cuts
The flow across ANY such cut is the same and is the current flow in the network
Inductive case: Consider moving a node x from A to B
x
in-flow = out-flow
flow = left-inflow(x) – left-outflow(x)
flow = right-outflow(x) – right-inflow(x)
left-inflow(x) + right-inflow(x) = left-outflow(x) + right-outflow(x)left-inflow(x) - left-outflow(x) = right-outflow(x) – right-inflow(x)
![Page 40: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/40.jpg)
Capacity of a cut
S
A
B
T
10
910
4
2
C
D
6
10
10
8
The “capacity of a cut” is the maximum flow that we could send from nodes in A to nodes in B (i.e. across the cut)
How do we calculate the capacity?
![Page 41: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/41.jpg)
Capacity of a cut
S
A
B
T
10
910
4
2
C
D
6
10
10
8
The “capacity of a cut” is the maximum flow that we could send from nodes in A to nodes in B (i.e. across the cut)Capacity is the sum of the edges from A to B
Why?
![Page 42: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/42.jpg)
Capacity of a cut
The “capacity of a cut” is the maximum flow that we could send from nodes in A to nodes in B (i.e. across the cut)Capacity is the sum of the edges from A to B
- Any more and we would violate the edge capacity constraint
- Any less and it would not be maximal, since we could simply increase the flow
![Page 43: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/43.jpg)
Quick recap
A cut is a partitioning of the vertices into two sets A and B = V-A
For any cut where s A and t B, i.e. the cut partitions the source from the sink
the flow across any such cut is the same the maximum capacity (i.e. flow) across the cut
is the sum of the capacities for edges from A to B
![Page 44: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/44.jpg)
Maximum flow
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
Are we done?Is this the best we can do?
For any cut where s A and t B the flow across the cut is the same the maximum capacity (i.e. flow) across the cut
is the sum of the capacities for edges from A to B
![Page 45: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/45.jpg)
Maximum flow
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
We can do no better than the minimum capacity cut!
For any cut where s A and t B the flow across the cut is the same the maximum capacity (i.e. flow) across the cut
is the sum of the capacities for edges from A to B
![Page 46: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/46.jpg)
Maximum flow
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
What is the minimum capacity cut for this graph?
Capacity = 10 + 4
Is this the best we can do?
![Page 47: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/47.jpg)
Maximum flow
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
What is the minimum capacity cut for this graph?
Capacity = 10 + 4
flow = minimum capacity, so we can do no better
![Page 48: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/48.jpg)
Algorithm idea
S
A
B
T
8/10
910
4
2
C
D
6
10
8/10
8/8
send some flow down a path
How do we determine the path to send flow down?
![Page 49: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/49.jpg)
Algorithm idea
S
A
B
T
8/10
910
4
2
C
D
6
10
8/10
8/8
send some flow down a path
Search for a path with remaining capacity from s to t
![Page 50: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/50.jpg)
Algorithm idea
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
reroute some of the flow
How do we handle “rerouting” flow?
![Page 51: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/51.jpg)
Algorithm idea
S
A
B
T
10/10
2/92/10
2/4
2
C
D
6
2/10
10/10
8/8
During the search, if an edge has some flow, we consider “reversing” some of that flow
![Page 52: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/52.jpg)
Algorithm idea
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
During the search, if an edge has some flow, we consider “reversing” some of that flow
reroute some of the flow
![Page 53: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/53.jpg)
The residual graph
The residual graph Gf is constructed from G
For each edge e in the original graph (G): if flow(e) < capacity(e)
introduce an edge in Gf with capacity = capacity(e)-flow(e)
this represents the remaining flow we can still push if flow(e) > 0
introduce an edge in Gf in the opposite direction with capacity = flow(e)
this represents the flow that we can reroute/reverse
![Page 54: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/54.jpg)
Algorithm idea
S
A
B
T
20
2010
10
30G
Gf
S
A
B
T
20
2010
10
30 Find a path froms to t in Gf
![Page 55: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/55.jpg)
Algorithm idea
G
Gf
S
A
B
T
20/20
20/2010
10
20/30
S
A
B
T
20
2010
10
1020 Find a path froms to t in Gf
![Page 56: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/56.jpg)
Algorithm idea
G
Gf
S
A
B
T
20
2010
10
2010
S
A
B
T
20/20
20/2010/10
10/10
10/30
Find a path froms to t in Gf
![Page 57: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/57.jpg)
Algorithm idea
G
Gf
S
A
B
T
20
2010
10
2010
S
A
B
T
20/20
20/2010/10
10/10
10/30
None exist… done!
![Page 58: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/58.jpg)
Algorithm idea
S
A
B
T
10
910
4
2
C
D
6
10
10
8
S
A
B
T
10
910
4
2
C
D
6
10
10
8
G
Gf
![Page 59: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/59.jpg)
Algorithm idea
9
G
Gf
S
A
B
T
8/10
10
4
2
C
D
6
10
8/10
8/8
S
A
B
T
2
910
4
2
C
D
6
10
2
8
88
Find a path froms to t in Gf
![Page 60: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/60.jpg)
Algorithm idea
G
Gf
Find a path froms to t in Gf
S
A
B
T
10/10
910
2/4
2
C
D
6
2/10
8/10
8/8
S
A
B
T
910
2
2
C
D
6
8
2
8
810
2
2
![Page 61: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/61.jpg)
Algorithm idea
G
Gf
Find a path froms to t in Gf
S
A
B
T
10/10
2/92/10
2/4
2
C
D
6
2/10
10/10
8/8
S
A
B
T
78
2
2
C
D
6
8
8
1010
2
2
2 2
![Page 62: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/62.jpg)
Algorithm idea
G
Gf
Find a path froms to t in Gf
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
S
A
B
T
56
2
C
D
6
6
6
1010
4
4
4 4
2
![Page 63: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/63.jpg)
Algorithm idea
G
Gf
DONE!
S
A
B
T
10/10
4/94/10
4/4
2
C
D
6
4/10
10/10
6/8
S
A
B
T
56
2
C
D
6
6
6
1010
4
4
4 4
2
![Page 64: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/64.jpg)
Ford-Fulkerson
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G)
while a simple path exists from s to t in Gf
send as much flow along the path as possible Gf = residualGraph(G)
return flow
a simple path contains no repeated vertices
![Page 65: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/65.jpg)
Ford-Fulkerson: is it correct?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
Does the function terminate?Every iteration increases the flow from s to t
Every path must start with s The path has positive flow (or it wouldn’t exist) The path is a simple path (so it cannot revisit s) conservation of flow
![Page 66: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/66.jpg)
Ford-Fulkerson: is it correct?
Does the function terminate? Every iteration increases the flow from s to
t the flow is bounded by the min-cut
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
![Page 67: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/67.jpg)
Ford-Fulkerson: is it correct?
When it terminates is it the maximum flow?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
![Page 68: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/68.jpg)
Ford-Fulkerson: is it correct?
When it terminates is it the maximum flow?
Assume it didn’t We know then that the flow < min-cut therefore, the flow < capacity across EVERY cut therefore, across each cut there must be a forward edge in
Gf
thus, there must exist a path from s to t in Gf
start at s (and A = s) repeat until t is found
pick one node across the cut with a forward edge add this to the path add the node to A (for argument sake)
However, the algorithm would not have terminated… a contradiction
![Page 69: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/69.jpg)
Ford-Fulkerson: runtime?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
![Page 70: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/70.jpg)
Ford-Fulkerson: runtime?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
- traverse the graph
- at most add 2 edges for original edge
- O(V + E)Can we simplify this expression?
![Page 71: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/71.jpg)
Ford-Fulkerson: runtime?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
- traverse the graph- at most add 2
edges for original edge
- O(V + E) = O(E)- (all nodes exists
on paths exist from s to t)
![Page 72: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/72.jpg)
Ford-Fulkerson: runtime?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
- BFS or DFS- O(V + E) = O(E)
![Page 73: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/73.jpg)
Ford-Fulkerson: runtime?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
- max-flow!- increases ever
iteration- integer capacities,
so integer increases
Can we bound the number of times the loop will execute?
![Page 74: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/74.jpg)
Ford-Fulkerson: runtime?
Ford-Fulkerson(G, s, t) flow = 0 for all edges Gf = residualGraph(G) while a simple path exists from s to t in Gf
send as much flow along path as possible Gf = residualGraph(G) return flow
- max-flow!- increases ever
iteration- integer capacities,
so integer increases
Overall runtime?O(max-flow * E)
![Page 75: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/75.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
100
100100
100
Hint:
![Page 76: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/76.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
100
100100
100
1
![Page 77: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/77.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
1/100
1/100100
100
1/1
![Page 78: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/78.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
1/100
1/1001/100
1/100
0/1
![Page 79: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/79.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
2/100
2/1001/100
1/100
1/1
![Page 80: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/80.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
2/100
2/1002/100
2/100
0/1
![Page 81: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/81.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
3/100
3/1002/100
2/100
1/1
![Page 82: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/82.jpg)
O(max-flow * E)
Can you construct a graph that could get this running time?
S
A
B
T
3/100
3/1003/100
3/100
0/1
What is the problem here? Could we do better?
![Page 83: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/83.jpg)
Faster variants
Edmunds-Karp Select the shortest path (in number of edges)
from s to t in Gf
How can we do this? use BFS for search
Running time: O(V E2) avoids issues like the one we just saw see the book for the proof or
http://www.cs.cornell.edu/courses/CS4820/2011sp/handouts/edmondskarp.pdf
preflow-push (aka push-relabel) algorithms O(V3)
![Page 84: MAX FLOW CS302, Spring 2013 David Kauchak. Admin](https://reader035.vdocuments.us/reader035/viewer/2022070407/56649e315503460f94b222a7/html5/thumbnails/84.jpg)
Other variations…
http://en.wikipedia.org/wiki/Maximum_flow
http://akira.ruc.dk/~keld/teaching/algoritmedesign_f03/Artikler/08/Goldberg88.pdf