Maximum Flow Algorithms: Ford-Fulkerson, Edmonds-Karp, and Push-Relabel, Study notes of Algorithms and Programming

Maximum flow algorithms, including ford-fulkerson, edmonds-karp, and push-relabel. These algorithms are used to find the maximum flow in a flow network, which can represent various systems such as liquids in pipes, parts in assembly lines, electrical networks, communication networks, and bipartite graphs. The concepts of flow networks, flow values, residual networks, and the ford-fulkerson method, as well as the edmonds-karp algorithm and push-relabel algorithms.

Typology: Study notes

Pre 2010

Uploaded on 07/30/2009

koofers-user-91t
koofers-user-91t 🇺🇸

9 documents

1 / 7

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1
Maximum Flow
A flow network is a directed graph where:
Each edge (u, v) has a capacity c(u, v)0.
If (u, v) is not an edge, then c(u, v) = 0.
There is a source vertex sand a sink vertex t.
A flow f(u, v) satisfies the following constraints:
for all (u, v), f(u, v)c(u, v)
for all (u, v), f(u, v) = f(v, u)
for all uexcept sand t,Σ
vVf(u, v)=0
We want to maximize the flow Ffrom sto t:
F=Σ
vVf(s, v) = Σ
vVf(v, t)
Algorithms for maximum flow can be used for
liquids flowing through pipes,
parts through assembly lines,
current through electrical networks,
information through communication networks,
the maximum matching in a bipartite graph,
and the minimum-size cut of a graph.
pf3
pf4
pf5

Partial preview of the text

Download Maximum Flow Algorithms: Ford-Fulkerson, Edmonds-Karp, and Push-Relabel and more Study notes Algorithms and Programming in PDF only on Docsity!

Maximum Flow

A flow network is a directed graph where: Each edge (u, v) has a capacity c(u, v) ≥ 0. If (u, v) is not an edge, then c(u, v) = 0. There is a source vertex s and a sink vertex t. A flow f (u, v) satisfies the following constraints:

for all (u, v), f (u, v) ≤ c(u, v) for all (u, v), f (u, v) = −f (v, u) for all u except s and t, (^) Σ v∈V

f (u, v) = 0

We want to maximize the flow F from s to t:

F = (^) Σ v∈V

f (s, v) = (^) Σ v∈V

f (v, t)

Algorithms for maximum flow can be used for liquids flowing through pipes, parts through assembly lines, current through electrical networks, information through communication networks, the maximum matching in a bipartite graph, and the minimum-size cut of a graph.

Ford-Fulkerson Method

Let f (·, ·) be a flow. Define residual capacity cf

cf (u, v) = c(u, v) − f (u, v)

Define residual edges Ef to be the edges with positive residual capacity.

Ef = {(u, v) ∈ V × V : cf (u, v) > 0 }

Ford-Fulkerson(G, s, t, c) for each edge (u, v) in G do f [u, v] ← 0 f [v, u] ← 0 while ( P ← a path from s to t in Ef ) do x ← min{cf (u, v) : (u, v) ∈ P } for each edge (u, v) in P do f [u, v] ← f [u, v] + x f [v, u] ← −f [u, v]

A maximum flow is found because every path from s to t is at full capacity.

Edmonds-Karp Algorithm

This algorithm uses the shortest augmenting path (found by BFS). Running time is O(V E^2 ).

Lemma: Residual path lengths do not decrease. Suppose the distance from s to v decreases. Let v be the closest vertex where this happens. Some vertex u becomes adjacent to v (otherwise v could not be closer). This implies (v, u) is on augmenting path, but this means u is farther from s than v. A contradiction, so distances do not decrease.

Lemma: Each edge is critical O(V ) times. A cf (u, v) is minimum on each augmenting path. This implies (u, v) removed from residual edges. For (u, v) to reappear as a residual edge, (v, u) must be on augmenting path. Because distance to v cannot decrease, distance to u must have increased. Thie implies each edge can be minimal O(V ) times.

Push-Relabel Algorithms

The excess flow into vertex u is defined as

e(u) = (^) Σ v∈V

f (v, u)

u is overflowing if e(u) > 0.

Flow goes from “higher” to “lower” vertices. h is a height function if h(s) = |V |, h(t) = 0, and

(u, v) ∈ Ef implies h(u) ≤ h(v) + 1 h(u) > h(v) + 1 implies (u, v) 6 ∈ Ef

Initialize-Preflow(G, s) for each vertex u in G do h[u] ← e[u] ← 0 for each edge (u, v) in G do f [u, v] ← f [v, u] ← 0 h[s] ← number of vertices for each vertex u in Adj[s] do f [s, u] ← c[s, u] f [u, s] ← −c[s, u] e[u] ← c[s, u] e[s] ← e[s] − c[s, u]

16

13

10

12

14

4 7

20

4

s 9 t

v v

v v

2

3 4

1 s t

v v

v v

2

3 4

1 16

13

16

13

10

12

14

4 7

20

4

s 9 t

v v

v v

2

3 4

1 12

14

s 4 t

v v

v v

2

3 4

1 16

13

Residual Networks Flow Values

16

13

6

12

14

8 7

20

4

s 9 t

v v

v v

2

3 4

1 12

14

s 4 t

v v

v v

2

3 4

1 16

(^134)

7

19

16

13

6

12

14

8 7 4

s 9 t

v v

v v

2

3 4

(^119) 1

12

11

s t

v v

v v

2

3 4

1 12

(^114)

7

19

Residual Networks Flow Values