04.09.2013 Views

Algorithm Design

Algorithm Design

Algorithm Design

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

380<br />

Chapter 7 Network Flow<br />

Figure 7.13 (a) Aninstance of the Circulation Problem together with a solution: Numbers<br />

inside the nodes are demands; numbers labeling the edges are capadties and flow<br />

values, with the flow values inside boxes. (b) The result of reducing this instance to an<br />

equivalent instance of the Maximum-Flow Problem.<br />

In this setting, we say that a circulation with demands {d,} is a function f<br />

that assigns a nonnegative real number to each edge and satisfies the following<br />

two conditions.<br />

O) (Capacity conditions) For each e E E, we have 0 < f(e) < Ce.<br />

(ii) (Demand conditions) For each u ~ V, we have u, fin(u) - f°ut(u) = du.<br />

Now, instead of considering a maximization problem, we are concerned with<br />

a feasibility problem: We want to know whether there exists a circulation that<br />

meets conditions (i) and (ii).<br />

For example, consider the instance in Figure 7.13(a). Two of the nodes<br />

are sources, with demands -3 and -3; and two of the nodes are sinks, with<br />

demands 2 and 4. The flow values in the figure constitute a feasible circulation,<br />

indicating how all demands can be satisfied while respecting the capacities.<br />

If we consider an arbitrary instance of the Circulation Problem, here is a<br />

simple condition that must hold in order for a feasible circulation to exist: The<br />

total supply must equal the total demand.<br />

(7.49) If there exists a feasible circulation with demands {du}, then ~u du = O.<br />

Proof. Suppose there exists a feasible circulation f in this setting. Then<br />

~-~.v du = ~u f in(u) - f °ut(u)" Now, in this latter expression, the value f(e) for<br />

each edge e = (u, u) is counted exactly twice: once in f°Ut(u) and once in fin(u).<br />

These two terms cance! out; and since this holds for all values f(e), the overall<br />

sum is 0. []<br />

supplies source~<br />

ith flow.<br />

7.7 Extensions to the Maximum-Flow Problem<br />

o t* siphons flow~<br />

ut of sinks. J<br />

Figure 7.14 Reducing the Circulation Problem to the Maximum-Flow Problem.<br />

Thanks to (7.49), we know that<br />

E<br />

v:dv>O v:du 0--we add<br />

an edge (u, t*) with capacity du. For each node u ~ S--that is, each node with<br />

d u < 0--we add an edge (s*, u) with capacity -du. We carry the remaining<br />

structure of G over to G’ unchanged.<br />

In this graph G’, we will be seeking a maximum s*-t* flow. Intuitively,<br />

we can think of this reduction as introducing a node s* that "supplies" all the<br />

sources with their extra flow, and a node t* that "siphons" the extra flow out<br />

of the sinks. For example, part (b) of Figure 7.13 shows the result of applying<br />

this reduction to the instance in part (a).<br />

Note that there cannot be an s*-t* flow in G’ of value greater than D, since<br />

the cut (A, B) with A = {s*} only has capacity D. Now, if there is a feasible<br />

circulation f with demands {du} in G, then by sending a flow value of -du on<br />

each edge (s*, u), and a flow value of du on each edge (u, t*), we obtain an s*t*<br />

flow in G’ of value D, and so this is a maximum flow. Conversely, suppose<br />

there is a (maximum) s*-t* flow in G’ of value D. It must be that every edge<br />

381

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!