Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
33 views70 pages

13 Maxflow

Uploaded by

phatge2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views70 pages

13 Maxflow

Uploaded by

phatge2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 70

Lát cắt cực tiểu,

luồng cực đại


Min cuts, max flows
Nội dung
• Lát cắt cực tiểu (minimum s-t cuts)
• Luồng cực đại (maximum s-t flows)
• Thuật toán Ford-Fulkerson
• Finds min cuts and max flows!
• Một số ví dụ

Sử dụng một phần tài liệu bài giảng CS161 Stanford University
Khái niệm
• 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
Lát cắt

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.
• 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.
Lát cắt cực tiểu
A minimum s-t cut is a cut which separates s
from t with minimum cost
• 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

• The US wanted to cut off


routes from suppliers in
Russia to Eastern Europe
as efficiently as possible.
These numbers
are capacities.
• In 1955, Ford and
Fulkerson gave an
algorithm which finds the
optimal s-t cut.

Schriver 2002
Luồng (Flows)
• In addition to a capacity, each edge has a flow
• (unmarked edges in the picture have flow 0)
• The flow on an edge must be at most its capacity.
• At each vertex, the incoming flows must equal the outgoing
flows.
4 units in, 3
1+1+2 = 4 units out. 2
2 4
4 6
2 1
6 1
4
2 4
s 1 2 t
3
2 1+1 = 2 units in, 6
6 2 units3out. 4 of this as
Think
meaning “send 2
10 units of stuff along
this edge.”
Because of conservation of
Flows flows at vertices,

• The value of a flow is: stuff you put in


=
• The amount of stuff coming out of s
stuff you take out.
• The amount of stuff flowing into t
• These are the same!

3
2
2 4
4 6
2 1
6 1
4
2 4
s 1 2 t
3
2 6
3 4
6

The value of 10
this flow is 4.
Luồng cực đại
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 6
2 1
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 maximum; 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
Định lý
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
Proof outline
• Lemma 1: max flow min cut.
• Proof-by-picture
• What we actually want: max flow min cut.
• Proof-by-algorithm…the Ford-Fulkerson algorithm!
• The Ford-Fulkerson algorithm actually finds the max flow and
the min cut.
One half of Min-Cut Max-Flow Theorem
• Lemma 1:
• For ANY s-t flow and ANY s-t cut, the value of the flow is
at most the cost of the cut.
• Hence max flow min cut.
ANY s-t CUT
Proof by picture:
All that stuff has to cross
So x cost of this cut
the cut at some point.

x stuff
comes
out of s
t
s
Ford-Fulkerson
Algorithm
Ford-Fulkerson algorithm
• Outline of algorithm:
• We will be updating a flow
• Start with
• We will maintain a “residual graph”
• A path from s to t in will give us a way to improve
our flow.
• We will continue until there are no s-t paths left in .

Assume for today that we


don’t have edges like this,
although this assumption
can be removed.
Mạng có dư (Residual networks)
Say we have a flow
a This forward edge has
2 weight [capacity] – [flow].
2
3 6 This backward edge
4 1 has weight [flow].
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
Mạng có dư (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
Residual networks tell us how to
improve the flow
• Definition: A path from s to t in the residual network
is called an augmenting path (đường tăng).
• Claim: If there is an augmenting path in , we can
increase the flow along that path in .

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
claim:
if there is an augmenting path, we can
increase the flow along that path.
• Easy case: every edge on the path in Gf is a forward edge in G

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

• Forward edges indicate how much stuff can still go through.


• Just increase the flow on all the edges!
claim:
if there is an augmenting path, we can
increase the flow along that path.
• Easy case: every edge on the path in Gf is a forward edge in G

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

• Forward edges indicate how much stuff can still go through.


• Just increase the flow on all the edges!
claim:
if there is an augmenting path, we can
increase the flow along that path.
• Easy case: every edge on the path in Gf is a forward edge in G

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

• Forward edges indicate how much stuff can still go through.


• Just increase the flow on all the edges! Then update the residual
graph.
claim:
if there is an augmenting path, we can
increase the flow along that path.
• Easy case: every edge on the path in Gf is a forward edge in G.

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

• Forward edges indicate how much stuff can still go through.


• Just increase the flow on all the edges! Then update the residual
graph.
claim:
if there is an augmenting path, we can
increase the flow along that path.
• Harder case: there are backward edges in G in the path.
• Here’s a slightly different example of a flow:

2
2 1
1 6 2
4 1 3 5
t
s 3 s 1 t
1 3 0 2 3
Call the flow 1
Call the graph Call this graph

I changed some of
the weights and
edge directions.
claim:
if there is an augmenting path, we can
increase the flow along that path.
• Harder case: there are backward edges in G in the path.
• Here’s a slightly different example of a flow:

2
2 1
1 6 2
4 1 3 5
t
s 3 s 1 t
1 3 0 2 3
Call the flow 1
Call the graph Call this graph
Now we should NOT increase the flow at
all the edges along the path! I changed some of
• For example, that will mess up the the weights and
conservation of stuff at this vertex. edge directions.
claim:
if there is an augmenting path, we can
increase the flow along that path.
• In this case we do something a bit different:
We will add We will remove flow here,
flow here since our augmenting path
is going backwards along
2 this edge.
2 1
21 6 2
4
01 3 5
t
s 3 s 1 t
1 3 10 2 3
Call the flow 1
Call the graph Call this graph

We will add
flow here
claim:
if there is an augmenting path, we can
increase the flow along that path.
• In this case we do something a bit different:
Then we’ll update the residual graph:

2
2 1
12 6 2
4 10 3 5
t
s 3 s 1 t
1 3 01 2 3
Call the flow 1
Call the graph Call this graph
claim:
if there is an augmenting path, we can
increase the flow along that path.
• In this case we do something a bit different:
Then we’ll update the residual graph:

2
2 2
12 6 2
4 10 2 6
t
s 3 s t
1 3 01 2 2
Call the flow 1 1
Call the graph Call this graph
2 in, 2 out
Before: flow value is 2
2
2 1
1 6 2
4 1 3 5
t
s 3 s 1 t
1 3 0 2 3
Call the flow 1
Call the graph 1 in, 1 out Call this graph

After: 2 in, 2 out

2 flow value is 3
2 2
12 6 2
4 10 2 6
t
s 3 s t
1 3 01 2 2
Call the flow 1 1
Call the graph 1 in, 1 out Call this graph

Still a legit flow, but with a bigger value!


claim:
if there is an augmenting path, we can
increase the flow along that path.

proof:
• increaseFlow(path P in , flow f ):
• x = min weight on any edge in P
• for (u,v) in P:
• if (u,v) in E, Check that this
always makes a
• if (v,u) in E, bigger (and legit)
• return f’ flow!
Ford-Fulkerson Algorithm

• Ford-Fulkerson(G):
• all zero flow.

• while t is reachable from s in
• Find a path P from s to t in // eg, use BFS
• increaseFlow(P,f)
• update
• return f
Example of Ford-Fulkerson
3 0
4
4 0 0
0 6
s 0 2 0 4 0 t
3
0
3 0
6 0 4
0
10
3
4 4
6
3 4
s t
2
3
6 4
10
Example of Ford-Fulkerson
3 0
4
4 0 0
0 6
s 0 2 0 4 0 t
3
0
3 0
6 0 4
0
10
3
4 4
6
3 4
s t
2
3
6 4
10
Example of Ford-Fulkerson
3 0
4
4 4 0
4 6
s 0 2 0 4 4 t
3
0
3 0
6 0 4
0
10
3
4
4 2
4
3 4
s t
2
3
6 4
10
Example of Ford-Fulkerson
3 0
4
4 4 0
4 6
s 0 2 0 4 4 t
3
0
3 0
6 0 4
0
10
3
4
4 2
4
3 4
s t
2
3
6 4
10
Example of Ford-Fulkerson
3 0
4
4 4 0
4 6
s 0 2 0 4 4 t
3
4
3 0
6 4 4
4
10
3
4
4 2
4
3 4
s t
2
4 3 4
2 4
6
Example of Ford-Fulkerson We will remove flow
from this edge.
3 0
4
4 4 0
4 6
s 0 2 0 4 4 t
3
4
3 0
6 4 4
4
10
Notice that we’re
going back along one
3
of the backwards 4
edges we added. 4 2
4
s 3 t
2 4
4 3 4
2 4
6
Example of Ford-Fulkerson We will remove flow
from this edge.
3 2
4
4 2 2
4 6
s 2 2 2 4 4 t
3
4
3 0
6 4 4
4
10
Notice that we’re
going back along one
1
of the backwards
2 2
edges we added. 4 4 2
2 2
s 1 t
4
4 3 2
4
2 4
6
Example of Ford-Fulkerson We will remove flow
from this edge AGAIN.
3 2
4
4 2 2
4 6
s 2 2 2 4 4 t
3
4
3 0
6 4 4
4
10
1
2 2
4 4 2
2
s
2 1 t
4
4 3 2
4
2 4
6
Example of Ford-Fulkerson We will remove flow
from this edge AGAIN.
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
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
3 1
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
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
There’s no path 5 2 4
from s to t, and
1
1 5
here’s the cut to
prove it. 5
Useful corollary
• Using Ford-Fulkerson alg. you can find :
• An s-t cut of cost X
• An s-t flow with value X

• Then the minimum s-t cut and the maximum s-t


flow must both be equal to X.

Min cut Max flow


X cost value
X
All of these things must be equal!
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
Handwaving
Why is this a max flow? 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…
• Useful corollary:
• To certify that you have a max flow,
it’s enough to find a cut with the
same cost.
• To certify that you have a min cut, it’s
enough to find a flow with the same
value.
• The Ford-Fulkerson algorithm can
find the min-cut/max-flow.
• Repeatedly improve your flow along
an augmenting path.
Our usual questions
about Ford-Fulkerson
• Does it work?
• Yep, just showed that

• Is it fast?
• Depends on how we pick the augmenting paths!
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
b
a 1
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
b
a 1
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
b
a 1
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
b
a 1
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
b
a 2
1

C-1 C-2
1
The edge (b,a) disappeared 2 t
s 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
b
a 2
1

C-1 C-2
1
The edge (b,a) disappeared 2 t
s 1
from the residual graph!
C-2 b
C-1
Edmonds-Karp Algorithm
• If we run the Ford-Fulkerson algorithm, using BFS to
pick augmenting paths, it’s called the Edmonds-Karp
Algorithm.

• It turns out that this will run in time O(nm2) on a graph


with n vertices and m edges.
One more useful observation
• 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 an
integer.
But wait, there’s more!
• Max flows and min cuts aren’t just for railway
routing.
• 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

For more on applications, check out this book chapter from “Algorithms” by Jeff Erickson:
https://jeffe.cs.illinois.edu/teaching/algorithms/book/11-maxflowapps.pdf
Ví dụ:
Maximum matching in bipartite graphs

• Different students only A


want certain items of
Stanford swag (depending
on fit, style, etc).
B
• How can we make as
many students as possible
happy? C

Stanford Students Stanford Swag


Maximum matching in bipartite graphs

• Different students only A


want certain items of
Stanford swag (depending
on fit, style, etc).
B
• How can we make as
many students as possible
happy? C

Stanford Students Stanford Swag


All edges have
Solution via max flow capacity 1.

s t

Stanford Students Stanford Swag


All edges have
Solution via max flow capacity 1.
1

1
1
1
1
s 1 t
1
1
1
1
1
1

Stanford Students Stanford Swag


Solution via max flow All edges have
why does this work? capacity 1.
4. The value of the
1. Because the
flow is the size of the
capacities are all 1 matching.
integers, so are the
flows – so they are 1
either 0 or 1. 1
1
1 Value of this
s 1 t
flow is 4.
1
1
1
1
1
1

2. Stuff in = stuff out 5. We conclude that


means that the number 3. Thus, the edges with flow on the max flow
of items assigned to them form a matching. (And, any corresponds to a
each student 0 or 1. matching gives a flow). max matching.
(And vice versa).
A slightly more complicated example:
assignment problems
• One set X
• Example: Stanford students
• Another set Y
• Example: tubs of ice cream
• Each x in X can participate in c(x) matches.
• Student x can only eat 4 scoops of ice cream.
• Each y in Y can only participate in c(y) matches.
• Tub of ice cream y only has 10 scoops in it.
• Each pair (x,y) can only be matched c(x,y) times.
• Student x only wants 3 scoops of flavor y
• Student x’ doesn’t want any scoops of flavor y’
• Goal: assign as many matches as possible.
How can we serve as much ice cream as possible?
Example
This person wants 4
scoops of ice cream, at 1 6
most 1 of chocolate 4
and at most 3 coffee. 3

3
3
3
1

1 1 10
5
10 3
10
This person is vegan 2
and not that hungry;
they only want two
2 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

Stanford Students Tubs of ice cream


Give this person 1
Solution via max flow scoop of this ice cream.

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

Stanford Students Tubs of ice cream


No more than 3
scoops of sorbet
Solution via max flow can be assigned.

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
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.
Tổng kết
• Khái niệm về lát cắt s-t (nguồn - đích) và luồng s-t.
• Định lý Min-Cut Max-Flow: tối thiểu hóa lát cắt đồng
nghĩa với tối đa hóa luồng.
• Thuật toán Ford-Fulkerson:
• Tìm một đường đi “tăng cường”
• Bổ sung lưu lượng của luồng bằng đường đi này
• Lặp lại cho đến khi không còn đường đi nào khác.
• Là cơ sở cho nhiều giải thuật khác
• Ví dụ, bài toán phân công (assignment problems).

You might also like