Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "1 Maximum flow: The preflow/push method of Goldberg and Tarjan (87)"— Presentation transcript:

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

2 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 ab cd 3 4 33 3 4 2 1

3 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  w f(v,w) = 0 The value of the flow |f| =  w f(s,w) The maxflow problem is to find f with maximum value

4 4 Flows and s-t cuts Let (X,X’) be a cut such that s  X, t  X’. s t 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

5 5 More definitions The residual capacity of a flow is a function r on the edges such that r(v,w) = c(v,w) - f(v,w) a d 2, 1 Interpretation: We can push r(v,w) more flow from v to w by increasing f(v,w) and decreasing f(w,v)

6 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)

7 7 Example 34 33 3 4 2 1 13 1 2 3 1 1 33 22 3 3 2 1 1 1 1 1 A flow The residual network

8 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’)

9 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

10 10 But we’ll go for the preflow/push method

11 11 Distance labels Defined with respect to residual capacities d(t) = 0 d(v) ≤ d(w) + 1 if r(v,w) > 0

12 12 Example (distance labels) 34 33 3 4 2 1 13 1 2 3 1 1 33 22 3 3 2 1 1 1 1 1 A flow The residual network

13 13 Example (distance labels) 34 33 3 4 2 1 13 1 2 3 1 1 33 22 3 3 2 1 1 1 1 1 A flow The residual network 0 1 1 2 2 3

14 14 Example (distance labels) 34 33 3 4 2 1 13 1 2 3 1 1 33 22 3 3 2 1 1 1 1 1 A flow The residual network 0 2 1 2 2 3

15 15 Example (distance labels) 34 33 3 4 2 1 13 1 2 3 1 1 33 22 3 3 2 1 1 1 1 1 A flow The residual network 0 3 1 2 3 4

16 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 v1v1 v2v2 t d(v) ≤ d(v 1 ) + 1 ≤ d(v 2 ) + 2..... ≤ d(t) + k = k

17 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,  v f(v,w) ≥ 0 Let e(w) =  v f(v,w) be the excess at the node v (we’ll also have e(t) ≥ 0, and e(s) ≤ 0)

18 18 Example (preflow) Nodes with positive excess are called active. st 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( ).

19 19 Initialization (preflow) 34 33 3 4 2 1 43 0 0 0 0 0 34 33 3 4 2 1 3 4 0

20 20 Initialization (distance labels) 34 33 3 4 2 1 43 0 0 0 0 0 34 33 3 4 2 1 6 0 0 0 0 0 3 4 Note: s must be disconnected from t when d(s) = n, and the labeling is valid…

21 21 Admissible arc in the residual graph w v d(v) = d(w) + 1

22 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) }

23 23 4 4 2 1 1 Example (preflow-push)

24 24 0 4 4 2 1 1 4 1 0 0 4 4 1

25 25 0 4 2 1 4 1 0 0 4 0 4 4 2 1 1 4 1 0 0 4 4 1 relabel

26 26 0 4 2 1 4 1 0 1 4 0 4 4 2 1 1 4 1 0 1 4 4 1 push

27 27 0 4 2 1 4 1 0 1 4 0 4 4 2 1 1 4 1 0 1 4 2 1 2 push

28 28 0 4 2 1 4 1 0 1 4 0 4 4 2 1 1 4 1 0 1 4 1 2 2 1 relabel

29 29 0 4 2 1 4 1 0 5 4 0 4 4 2 1 1 4 1 0 5 4 1 2 2 1 push

30 30 0 4 2 1 3 1 0 5 4 0 4 4 2 1 1 3 1 0 5 4 0 2 2 1 1 relabel

31 31 1 4 2 1 3 1 0 5 4 1 4 4 2 1 1 3 1 0 5 4 0 2 2 1 1 push

32 32 1 2 2 1 3 1 0 5 4 1 4 4 2 1 1 3 1 0 5 4 0 0 2 1 1 2 2

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58 58 Correctness Lemma 1: The source is reachable from every active vertex in the residual network Proof: Which means that no flow enters S.. v s S Assume that’s not the case:

59 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.

60 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

61 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)

62 62 Complexity analysis

63 Another example 63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117 117 4 1 2 2 2 4 2 Well, lets do another example first

118 118 0 4 1 2 2 2 4 2 0 0 6 0 0 4 2

119 119 0 4 1 2 2 2 4 2 0 0 6 0 0 4 2 0 4 1 2 2 2 0 0 6 0 0 4 2 relabel

120 120 0 4 1 2 2 2 4 2 0 1 6 0 0 4 2 0 4 1 2 2 2 0 1 6 0 0 4 2 push

121 121 0 4 1 2 2 2 4 2 0 1 6 0 0 4 2 0 4 1 2 2 2 0 1 6 0 0 4 2 2 2 relabel

122 122 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 2 2 push

123 123 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 2 2 2 relabel

124 124 0 4 1 2 2 2 4 2 0 3 6 2 0 4 2 0 4 1 2 2 2 0 3 6 2 0 4 2 2 2 2 push

125 125 0 4 1 2 2 2 4 2 0 3 6 2 0 4 2 0 4 1 2 2 2 0 3 6 2 0 4 2 2 2 0

126 126 0 4 1 2 2 2 4 2 0 7 6 6 0 4 2 0 4 1 2 2 2 0 7 6 6 0 4 2 2 2 2 Skipping some steps…

127 127 Complexity analysis Observation: d(v) increases when we relabel v ! Lemma: d(v) ≤ 2n-1 Proof: v v1v1 v2v2 s d(v) ≤ d(v 1 ) + 1 ≤ d(v 2 ) + 2..... ≤ d(s) + (n-1) = 2n-1

128 128 Complexity analysis (cont) Lemma: The # of relabelings is (2n-1)(n-2) < 2n 2 Proof: At most 2n-1 per each node other than s and t

129 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

130 130 Nonsaturating pushes Lemma: The # of nonsaturating pushes is at most 4n 2 m 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)

131 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

132 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.

133 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

134 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(n 2 m)

135 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

136 136 4 1 2 2 2 4 2 Example (FIFO order)

137 137 0 4 1 2 2 2 4 2 0 0 6 0 0 4 2

138 138 0 4 1 2 2 2 4 2 0 0 6 0 0 4 2 0 4 1 2 2 2 0 0 6 0 0 4 2 relabel x y z u v w Q: z y 4 2

139 139 0 4 1 2 2 2 4 2 0 1 6 0 0 4 2 0 4 1 2 2 2 0 1 6 0 0 4 2 x y z u v w Q: y z relabel 4 2

140 140 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 x y z u v w Q: z y push 4 2

141 141 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 2 2 push x y z u v w Q: y u 2 2

142 142 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 2 2 2 x y z u v w Q: u z relabel 2 2

143 143 1 4 1 2 2 2 4 2 0 1 6 2 0 4 2 1 4 1 2 2 2 0 1 6 2 0 4 2 2 2 2 x y z u v w Q: z u relabel 2 2

144 144 1 4 1 2 2 2 4 2 0 3 6 2 0 4 2 0 4 1 2 2 2 0 3 6 2 0 4 2 2 2 2 x y z u v w Q: u z

145 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)

146 146 0 4 1 2 2 2 4 2 0 0 6 0 0 4 2 0 4 1 2 2 2 0 0 6 0 0 4 2 relabel x y z u v w Q: z y 4 2

147 147 0 4 1 2 2 2 4 2 0 1 6 0 0 4 2 0 4 1 2 2 2 0 1 6 0 0 4 2 x y z u v w Q: y z relabel 4 2

148 148 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 x y z u v w Q: z y 4 2 End of pass 1

149 149 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 x y z u v w Q: z y push 4 2

150 150 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 2 2 push x y z u v w Q: y u 2 2

151 151 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 2 2 2 x y z u v w Q: u z 2 2 End of pass 2

152 152 0 4 1 2 2 2 4 2 0 1 6 2 0 4 2 0 4 1 2 2 2 0 1 6 2 0 4 2 2 2 2 x y z u v w Q: u z relabel 2 2

153 153 1 4 1 2 2 2 4 2 0 1 6 2 0 4 2 1 4 1 2 2 2 0 1 6 2 0 4 2 2 2 2 x y z u v w Q: z u relabel 2 2

154 154 1 4 1 2 2 2 4 2 0 3 6 2 0 4 2 0 4 1 2 2 2 0 3 6 2 0 4 2 2 2 2 x y z u v w Q: u z End of pass 3

155 155 Analysis Note that we still have the O(n 2 m) bound How many passes are there ? Let Φ = max active v d(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(n 2 ) passes of the second kind. These passes increase Φ by at most O(n 2 )  There are at most O(n 2 ) passes of the first kind

156 156 Analysis (Cont) So we have O(n 2 ) passes In each pass we have at most one nonsaturating push per vertex  O(n 3 ) nonsaturating pushes  O(n 3 ) total running time

157 157 A faster implementation Maintain a (dynamic) forest of some of the admissible current edges

158 158 Reminder: Admissible arc in the residual graph w v d(v) = d(w) + 1

159 159 A faster implementation Maintain a (dynamic) forest of some of the admissible current edges

160 160 A faster implementation Maintain a (dynamic) forest of some of the admissible current edges Active guys are among the roots

161 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) }

162 162 A faster implementation Q: v…..  discharge(v)  Treepush/relabel(v) v w

163 163 Case 1: (v,w) is admissible v w link(v,w,r f (v,w)), (v,c) = findmin(v), addcost(v,-c) Let (u,c) = findmin(v) If c=0 cut(u) and repeat If e(v) > 0 and v is not a root then repeat

164 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

165 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

166 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)

167 167 Can we improve on that ? Notice that we have not really used the fact that Q is a queue, any list would do !

168 168 Idea: Don’t get the trees to grow too large Case 1: (v,w) is admissible v w link(v,w,r f (v,w)), (v,c) = findmin(v), addcost(v,-c) Let (u,c) = findmin(v) If c=0 cut(u) and repeat If 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)

169 169 If we are about to create a tree with at least k vertices v w Push from v to w min{e(v),r f (v,w)} flow (w,c) = findmin(w), addcost(w,-c) Let (u,c) = findmin(w) If c=0 cut(u) and repeat If e(w) > 0 and w is not a root then repeat

170 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)

171 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 TvTv TrTr Either T v or T r is large ≥ k/2

172 172 v r w Charge it to the large tree if it existed at the beginning of the phase TvTv TrTr Charge it to the link or cut creating it if it did not exist at the beginning of the phase.

173 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(n 3 /k) So we get O(mn + n 3 /k) dynamic tree operations each costs O(log k) For k=n 2 /m we get O(mnlog(n 2 /m))


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

Similar presentations


Ads by Google