This preview has intentionally blurred sections. Sign up to view the full version.View Full Document
Unformatted text preview: Algorithms Lecture 18: Extensions of Maximum Flow “Who are you?" said Lunkwill, rising angrily from his seat. “What do you want?" “I am Majikthise!" announced the older one. “And I demand that I am Vroomfondel!" shouted the younger one. Majikthise turned on Vroomfondel. “It’s alright," he explained angrily, “you don’t need to demand that." “Alright!" bawled Vroomfondel banging on an nearby desk. “I am Vroomfondel, and that is not a demand, that is a solid fact! What we demand is solid facts!" “No we don’t!" exclaimed Majikthise in irritation. “That is precisely what we don’t demand!" Scarcely pausing for breath, Vroomfondel shouted, “We don’t demand solid facts! What we demand is a total absence of solid facts. I demand that I may or may not be Vroomfondel!" — Douglas Adams, The Hitchhiker’s Guide to the Galaxy (1979) 18 Extensions of Maximum Flow ? 18.1 Maximum Flows with Edge Demands Now suppose each directed edge e in has both a capacity c ( e ) and a demand d ( e ) ≤ c ( e ) , and we want a flow f of maximum value that satisfies d ( e ) ≤ f ( e ) ≤ c ( e ) at every edge e . We call a flow that satisfies these constraints a feasible flow. In our original setting, where d ( e ) = 0 for every edge e , the zero flow is feasible; however, in this more general setting, even determining whether a feasible flow exists is a nontrivial task. Perhaps the easiest way to find a feasible flow (or determine that none exists) is to reduce the problem to a standard maximum flow problem, as follows. The input consists of a directed graph G = ( V , E ) , nodes s and t , demand function d : E → IR, and capacity function c : E → IR. Let D denote the sum of all edge demands in G : D : = X u v ∈ E d ( u v ) . We construct a new graph G = ( V , E ) from G by adding new source and target vertices s and t , adding edges from s to each vertex in V , adding edges from each vertex in V to t , and finally adding an edge from t to s . We also define a new capacity function c : E → IR as follows: • For each vertex v ∈ V , we set c ( s v ) = ∑ u ∈ V d ( u v ) and c ( v t ) = ∑ w ∈ V d ( v w ) . • For each edge u v ∈ E , we set c ( u v ) = c ( u v )- d ( u v ) . • Finally, we set c ( s t ) = ∞ . Intuitively, we construct G by replacing any edge u v in G with three edges: an edge u v with capacity c ( u v )- d ( u v ) , an edge s v with capacity d ( u v ) , and an edge u t with capacity d ( u v ) . If this construction produces multiple edges from s to the same vertex v (or to t from the same vertex v ), we merge them into a single edge with the same total capacity. In G , the total capacity out of s and the total capacity into t are both equal to D . We call a flow with value exactly D a saturating flow, since it saturates all the edges leaving s or entering t . If G has a saturating flow, it must be a maximum flow, so we can find it using any max-flow algorithm....
View Full Document
This note was uploaded on 12/15/2009 for the course 942 cs taught by Professor A during the Spring '09 term at University of Illinois at Urbana–Champaign.
- Spring '09