Top Banner
1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
124

1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

Dec 21, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

1

Maximum flow: The preflow/push method of Goldberg and Tarjan

(87)

Page 2: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

2

Definitions

• G=(V,E) is a directed graph

• capacity c(v,w) for every v,w V: If (v,w) E then c(v,w) = 0

• Two distinguished vertices s and t.

s

t

a b

c d

3 4

3 3

34

2

1

Page 3: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

3

Definitions (cont)

A flow is a function on the edges which satisfies the following requirements

• f(v,w) = -f(w,v) skew symmetry

• f(v,w) c(v,w)

• For every v except s and t wf(v,w) = 0

The value of the flow |f| = wf(s,w)

The maxflow problem is to find f with maximum value

Page 4: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

4

Flows and s-t cutsLet (X,X’) be a cut such that s X, t X’.

st

f(X,X’) = f(v,w) = f(v,w) - f(v,w) = |f| - 0 = |f|

|f| cap(X,X’) = c(v,w)

Flow is the same across any cut:

so

The value of the maximum flow is smaller than the minimum capacity of a cut.

v X, w X’

v X, w V

v X, w X

Page 5: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

5

More definitionsThe residual capacity of a flow is a function r on the edges such that

r(v,w) = c(v,w) - f(v,w)

a

d2, 1

Interpretation: We can push r(v,w) more flow from v to w by increasing f(v,w) and decreasing f(w,v)

Page 6: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

6

More definitions (cont)We define the residual graph R on V such that there is an arc from v to w with capacity r(v,w) for every v and w such that r(v,w) > 0

An augmenting path p R is a path from s to t in R

r(p) = min r(v,w)(v,w) p

We can increase the flow by r(p)

Page 7: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

7

Example

3 4

3 3

34

2

1

13

12

31

1

3 3

2 2

33

2

1

1

1

1

1

A flow The residual network

Page 8: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

8

Basic theorem

(1) f is max flow <==>

(2) There is no augmenting path in R <==>

(3) |f| = cap(X,X’) for some X

Proof. (3) ==> (1), (1) ==> (2) obvious

To prove (2) ==>(3) let X be all vertices reachable from s in R. By assumption t X. So (X,X’) is an s-t cut. Since there is no edge from X to X’ in R |f| = f(X,X’) = f(v,w) = c(v,w) = cap(X,X’)

Page 9: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

9

Augmenting path methods

Repeat the following step:

Find an augmenting path in R, increase the flow, update R

Stop when s and t are disconnected in R.

Need to be careful about how you choose those augmenting paths !

The best algorithm in this family is Dinic’s algorithm, that can be implemented in O(nmlog(n)) time

Page 10: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

10

But we’ll go for the preflow/push method

Page 11: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

11

Distance labels

• Defined with respect to residual capacities

• d(t) = 0• d(v) ≤ d(w) + 1 if r(v,w) > 0

Page 12: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

12

Example (distance labels)

3 4

3 3

34

2

1

13

12

31

1

3 3

2 2

33

2

1

1

1

1

1

A flow The residual network

Page 13: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

13

Example (distance labels)

3 4

3 3

34

2

1

13

12

31

1

3 3

2 2

33

2

1

1

1

1

1

A flow The residual network

0

11

2 2

3

Page 14: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

14

Example (distance labels)

3 4

3 3

34

2

1

13

12

31

1

3 3

2 2

33

2

1

1

1

1

1

A flow The residual network

0

21

2 2

3

Page 15: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

15

Example (distance labels)

3 4

3 3

34

2

1

13

12

31

1

3 3

2 2

33

2

1

1

1

1

1

A flow The residual network

0

31

2 3

4

Page 16: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

16

Distance labels – basic lemma

Lemma: d(v) is a lower bound on the length of the shortest path from v to the sink

Proof: Let the s.p. to the sink be:

v v1 v2 t

d(v) ≤ d(v1) + 1 ≤ d(v2) + 2 ..... ≤ d(t) + k = k

Page 17: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

17

Preflow (definition)

A preflow is a function on the edges which satisfies the following requirements

• f(v,w) = -f(w,v) skew symmetry

• f(v,w) c(v,w)

• For every v, except s and t, vf(v,w) ≥ 0

Let e(w) = vf(v,w) be the excess at the node v

(we’ll also have e(t) ≥ 0, and e(s) ≤ 0)

Page 18: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

18

Example (preflow)

Nodes with positive excess are called active.

s t

3

3

3

2

2

2

2

1

2

1

0

0

The preflow push algorithm will try to push flow from active nodes towards the sink, relying on d( ).

Page 19: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

19

Initialization (preflow)

3 4

3 3

34

2

1

43

00

00

0

3 4

3 3

34

2

13

40

Page 20: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

20

Initialization (distance labels)

3 4

3 3

34

2

1

43

00

00

0

3 4

3 3

34

2

1

6

0

0

0

00

34

Note: s must be disconnected from t when d(s) = n, and the labeling is valid…

Page 21: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

21

Admissible arc in the residual graph

w

v

d(v) = d(w) + 1

Page 22: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

22

The preflow push algorithm

While there is an active node {

pick an active node v and push/relabel(v)

}Push/relabel(v) {

If there is an admissible arc (v,w) then {

push = min {e(v) , r(v,w)} flow from v to w

} else {

d(v) := min{d(w) + 1 | r(v,w) > 0} (relabel)

}

Page 23: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 24: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 25: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 26: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 27: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 28: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 29: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 30: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 31: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 32: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 33: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 34: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 35: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 36: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

58

Correctness

Lemma 1: The source is reachable from every active vertex in the residual network

Proof:

Which means that no flow enters S..

vs

S

Assume that’s not the case:

Page 37: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

59

Correctness (cont)

Corollary: There is an outgoing arc incident with every active vertex

so assuming distance labels are valid, we can always either push or relabel an active node.

Page 38: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

60

Correctness (cont)

Lemma 1: Distance labels remain valid at all times

Proof:

By induction on the number of pushing and relabeling operations.

For relabel this is clear by the definition of relabel

For push: v w

d(v) = d(w) + 1 so even if we add (w,v) to the residual network then it is still a valid labeling

Page 39: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

61

Correctness (cont)

Corollary: So we can push-relabel as long as there is an active vertex

Lemma: When (and if) the algorithm stops the preflow is a maximum flow

Proof:

It is a flow since there is no active vertex.

It is maximum since the sink is not reachable from the source in the residual network. (d(s) = n, and the labeling is valid)

Page 40: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

62

Complexity analysis

Page 41: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

Another example

63

Page 42: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 43: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 44: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 45: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 46: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 47: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 48: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 49: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 50: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 51: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 52: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 53: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 54: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 55: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 56: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 57: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 58: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 59: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 60: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 61: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 62: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 63: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 64: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 65: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 66: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 67: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 68: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 69: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 70: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 71: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 72: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 73: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 74: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 75: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 76: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 77: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)
Page 78: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

127

Complexity analysis

Observation: d(v) increases when we relabel v !

Lemma: d(v) ≤ 2n-1

Proof:

vv1v2s

d(v) ≤ d(v1) + 1 ≤ d(v2) + 2 ..... ≤ d(s) + (n-1) = 2n-1

Page 79: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

128

Complexity analysis (cont)

Lemma: The # of relabelings is (2n-1)(n-2) < 2n2

Proof:

At most 2n-1 per each node other than s and t

Page 80: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

129

Complexity analysis (cont)

Def: Call a push saturating if min{e(v), r(v,w)} = r(v,w)

Lemma: The # of saturating pushes is at most 2nm

Proof: Before another saturating push on (v,w), we must push from w to v.

d(w) must increase by at least 2

Since d(w) ≤ 2n-1, this can happen at most n times

Page 81: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

130

Nonsaturating pushes

Lemma: The # of nonsaturating pushes is at most 4n2m

Proof:

Let Φ = Σv active d(v)

• Decreases (by at least one) by every nonsaturating push

• Increases by at most 2n-1 by a saturating push : total increase (2n-1)2nm

• Increases by each relabeling: total increase < (2n-1)(n-2)

Page 82: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

131

Implementation

Maintain a list of active nodes, so finding an active node is easy

Given an active node v, we need to decide if there is an admissible arc (v,w) to push on ?

v

current edge

All edges, not only those in R

Page 83: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

132

Current edge

v

current edge

If the current edge (v,w) is admissible, push on it (updating the list of active vertices)

Otherwise, advance the current edge pointer

if you are on the last edge, relabel v and set the current edge to be the first one.

Page 84: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

133

Is this implementation correct?

Lemma: When we relabel v there is no admissible arc (v,w)

Proof: After we scanned (v,w) either (v,w) dropped off the residual network or d(v) ≤ d(w)

If d(v) ≤ d(w) then this must be the case now since v has not been relabeled.

If (v,w) got back on the list of v since it was scanned then when that happened d(w) = d(v) + 1 d(v) ≤ d(w) and this must be the case now

Page 85: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

134

Analysis

Lemma: The total time spent at v between two relabelings of v is Δv plus O(1) per push out of v

Summary: Since we relabel v at most (2n-1) times we get that the total work at v is O(nΔv) + O(1) per push out of v.

Summing over all vertices we get that the total time is O(nm) + #of pushes

O(n2m)

Page 86: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

135

Maintain the list of active vertices as a FIFO queue (Q)

Discharge the first vertex of the queue:

Discharge(v) {

While v is active and hasn’t been relabeled then push/relabel(v).

(If the loop stops because v is relabeled then add v to the end of Q)

}

Reducing the # of nonsaturating pushes

Page 87: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

136

4

1

2

2

2

4

2

Example (FIFO order)

Page 88: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

137

0

4

1

2

2

2

4

20

0

6 0

04

2

Page 89: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

138

0

4

1

2

2

2

4

20

0

6 0

04

2

0

4

1

2

2

20

0

6 0

04

2

relabel

x y

z

u v

w

Q: z y

4

2

Page 90: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

139

0

4

1

2

2

2

4

20

1

6 0

04

2

0

4

1

2

2

20

1

6 0

04

2

x y

z

u v

w

Q: y z relabel

4

2

Page 91: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

140

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

x y

z

u v

w

Q: z y

push

push

4

2

Page 92: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

141

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

2

2

push

x y

z

u v

w

Q: y u

2

2

Page 93: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

142

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

2

2

2

x y

z

u v

w

Q: u z

relabel

2

2

Page 94: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

143

1

4

1

2

2

2

4

20

1

6 2

04

2

1

4

1

2

2

20

1

6 2

04

2

2

2

2

x y

z

u v

w

Q: z u

relabel

2

2

Page 95: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

144

1

4

1

2

2

2

4

20

3

6 2

04

2

0

4

1

2

2

20

3

6 2

04

2

2

2

2

x y

z

u v

w

Q: u z

Page 96: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

145

Passes

Pass 1: Until you finish discharging all vertices initially in Q

Pass i: Until you finish discharging all vertices added to Q in pass (i-1)

Page 97: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

146

0

4

1

2

2

2

4

20

0

6 0

04

2

0

4

1

2

2

20

0

6 0

04

2

relabel

x y

z

u v

w

Q: z y

4

2

Page 98: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

147

0

4

1

2

2

2

4

20

1

6 0

04

2

0

4

1

2

2

20

1

6 0

04

2

x y

z

u v

w

Q: y z relabel

4

2

Page 99: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

148

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

x y

z

u v

w

Q: z y

4

2

End of pass 1

Page 100: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

149

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

x y

z

u v

w

Q: z y

push

push

4

2

Page 101: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

150

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

2

2

push

x y

z

u v

w

Q: y u

2

2

Page 102: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

151

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

2

2

2

x y

z

u v

w

Q: u z

2

2End of pass 2

Page 103: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

152

0

4

1

2

2

2

4

20

1

6 2

04

2

0

4

1

2

2

20

1

6 2

04

2

2

2

2

x y

z

u v

w

Q: u z

relabel

2

2

Page 104: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

153

1

4

1

2

2

2

4

20

1

6 2

04

2

1

4

1

2

2

20

1

6 2

04

2

2

2

2

x y

z

u v

w

Q: z u

relabel

2

2

Page 105: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

154

1

4

1

2

2

2

4

20

3

6 2

04

2

0

4

1

2

2

20

3

6 2

04

2

2

2

2

x y

z

u v

w

Q: u z

End of pass 3

Page 106: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

155

Analysis

Note that we still have the O(n2m) bound

How many passes are there ?

Let Φ = maxactive vd(v)

1) If the algorithm does not relabel during a pass then Φ decreases by at least 1 (each active node at the beginning of a pass moved its excess to a vertex with lower label)

2) If we relabel then Φ may increase by at most the maximum increase of a distance label

There are at most O(n2) passes of the second kind. These passes increase Φ by at most O(n2) There are at most O(n2) passes of the first kind

Page 107: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

156

Analysis (Cont)

So we have O(n2) passes

In each pass we have at most one nonsaturating push per vertex

O(n3) nonsaturating pushes

O(n3) total running time

Page 108: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

157

A faster implementation

Maintain a (dynamic) forest of some of the admissible current edges

Page 109: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

158

Reminder: Admissible arc in the residual graph

w

v

d(v) = d(w) + 1

Page 110: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

159

A faster implementation

Maintain a (dynamic) forest of some of the admissible current edges

Page 111: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

160

A faster implementation

Maintain a (dynamic) forest of some of the admissible current edges

Active guys are among the roots

Page 112: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

161

At a high level the algorithm is almost the same

While there is an active node in Q {

Let v be the first in Q

discharge(v)

}

discharge(v) {

While v is active and hasn’t been relabeled then Treepush/relabel(v).

(If the loop stops because v is relabeled then add v to the end of Q)

}

Page 113: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

162

A faster implementation

Q: v….. discharge(v) Treepush/relabel(v)

v

w

Page 114: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

163

Case 1: (v,w) is admissible

v

w

link(v,w,rf(v,w)),

(v,c) = findmin(v), addcost(v,-c)

Let (u,c) = findmin(v) If c=0 cut(u) and repeatIf e(v) > 0 and v is not a root then repeat

Page 115: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

164

Case 2: (v,w) is not admissible

v

w

a) If (v,w) is not the last edge then advance the current edge

b) If (v,w) is the last edge we relabel v and perform cut(u) for every child u of v

Page 116: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

165

Analysis

O(1) work + tree operations in Treepush/relabel +

O(1) work + tree operations per cut

How many cuts do we do ?

O(mn)

How many times do we call Treepush/relabel ?

O(mn) + # of times we add a vertex to Q

Page 117: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

166

Analysis (Cont)

How many times a vertex can become active ?

We can charge each new active vertex to a link or a cut

A vertex becomes active O(mn) times

Summary: we do O(mn) dynamic tree operations

We’ll see how to do those in O(log n) each so we get running time of O(mnlog n)

Page 118: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

167

Can we improve on that ?

Notice that we have not really used the fact that Q is a queue, any list would do !

Page 119: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

168

Idea: Don’t get the trees to grow too large

Case 1: (v,w) is admissible

v

w

link(v,w,rf(v,w)),

(v,c) = findmin(v), addcost(v,-c)

Let (u,c) = findmin(v) If c=0 cut(u) and repeatIf e(v) > 0 and v is not a root then repeat

We won’t do the link if a too large tree is created (say larger than k)

Page 120: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

169

If we are about to create a tree with at least k vertices

v

w

Push from v to w min{e(v),rf(v,w)} flow

(w,c) = findmin(w), addcost(w,-c)

Let (u,c) = findmin(w) If c=0 cut(u) and repeatIf e(w) > 0 and w is not a root then repeat

Page 121: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

170

What collapses in our analysis ?

Note r may become active and we cannot charge it to a link or a cut !

v

r

w

So we cannot say that the # of insertions into Q is O(mn)

Page 122: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

171

How do we recover ?

v

r

w

May assume that the push from v is not saturating..(there are only O(nm) saturating ones)

There cannot be another such push involving v as the pushing root and r as the “becoming active” node in a phase

Tv

Tr

Either Tv or Tr is large ≥ k/2

Page 123: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

172

v

r

w

Charge it to the large tree if it existed at the beginning of the phase

Tv

Tr

Charge it to the link or cut creating it if it did not exist at the beginning of the phase.

Page 124: 1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)

173

Each link is charged once, a cut is charged twice O(mn) such charges over all phases.

At the beginning of a phase we have O(n/k) large trees, each charged once O(n3/k)

So we get O(mn + n3/k) dynamic tree operations each costs O(log k)

For k=n2/m we get O(mnlog(n2/m))