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.

636<br />

Chapter !! Approximation <strong>Algorithm</strong>s<br />

(11.23) Let S* denote a vertex cover o] ~ minimum tveight. Then tvLp < w(S*).<br />

Proof. Vertex covets of G correspond to integer solutions of (VC.IP)~ so the<br />

minimum of nfin(tvtx : -i >_ x >_ O, Ax >_ !) over all integer x vectors is exactly<br />

the minimum-weight vertex cover. To get the minimum of the linear program<br />

(VC.LP), we allow x to take arbitrary real-number values--that is, we minimize<br />

over many more choices of x--and so the minimum of (VC.LP) is no larger<br />

than that of (VC.IP). []<br />

Note that (11.23) is one of the crucial ingredients we need for an approximation<br />

algorithm: a good lower bound on the optimum, in the form of the<br />

efficiently computable quantity tvLp.<br />

However, tvLp Can definitely be smaller than tv(S*). For example, if the<br />

graph G is a triangle and all weights are 1, then the minimum vertex cover has<br />

a weight of 2. But, in a linear programming solution, we can set xi = ½ for 3 AS all<br />

three vertices, and so get a linear programming solution of weight only ~.<br />

a more general example, consider a graph on n nodes in which each pair of<br />

nodes is connected by an edge. Again, all weights are 1. Then the minimum<br />

vertex cover has weight n - 1, but we can find a linear programming solution<br />

of value n/2 by setting xi = } for all vertices i.<br />

So the question-is: How can solving this linear program help us actually<br />

find a near-optimal vertex cover? The idea is to work with the values x~ and<br />

to infer a vertex cover S from them. It is natural that ¯ if x~ = 1 for some node i,<br />

then we should put it in the vertex cover S; and if * x 0<br />

i = , then we should leave<br />

it out of S. But what should we do with fractional values in between? What<br />

¯<br />

should we do if x .4 or * .5? The natural approach here is to round¯<br />

i = xi =<br />

¯ Xi --<br />

Given a fractional solution {x~}, we define S = {i ~ V" * > }}--that is, we<br />

rotmd values at least } up, and those below } down¯<br />

(11.24) The set S defined in this tray is a vertex cover, and tv(S)< tvLp.<br />

Proof. First we argue that S is a vertex cover. Consider an edge e ---- (i, ]). We<br />

claim that at least one of i and] must be in S. Recall that one of our inequalities<br />

is xi + xj > 1. So in any solution x* that satisfies this inequality, either x~ > }<br />

or x~* > }. Thus at least one of these two will be rounded up, and i or ] will be<br />

I -placed<br />

in S.<br />

Now we consider the weight iv(S) of this vertex cover. The set S only has<br />

vertices with x~ > }; thus the linear program "paid" at least }tvi for node i, and<br />

we only pay tvi: at most twice as much. More formally, we have the following<br />

chain of inequalities.<br />

i ieS ieS<br />

11.7 Load Balancing Revisited: A More Advanced LP Application<br />

Thus we have a produced a vertex cover S of weight at most 2tvLp. The<br />

lower bound in (11.23) showed that the optimal vertex cover has weight at<br />

least tvL~, and so we have the following result.<br />

(11.25) The algorithm produces a vertex cover S o~at most ttvi~e th~ minimum<br />

possible tvelght.<br />

* 11.7 Load Balancing Revisited: A ~ore Advanced<br />

LP Application<br />

In this section we consider a more general load balancing problem. We will<br />

develop an approximation algorithm using the same general outline as the 2approximation<br />

we iust designed for Vertex Cover: We solve a corresponding<br />

linear program, and then round the solution. However, the algorithm and its<br />

analysis here will be significantly more complex than what was needed for<br />

Vertex Cover. It turns out that the instance of the Linear programming Problem<br />

we need to solve is, in fact, a flow problem. Using this fact, we will be able<br />

to develop a much deeper understanding of what the fractional solutions to<br />

the linear program look like, and we will use this understanding in order to<br />

round them. For this problem, the only known constant-factor approximation<br />

algorithm is based on rounding this linear programming solution.<br />

~ The Problem _<br />

The problem we consider in this section is a significant, but natural, generalization<br />

of the Load Balancing Problem with which we began our study of<br />

approximation algorithms. There, as here, we have a set J of n jobs, and a set<br />

M of m machines, and the goal is to assign each job to a machine so that the<br />

maximum load on any machine will be as small as possible. In the simple Load<br />

Balancing Problem we considered earlier, each job j can be assigned to any<br />

machine i. Here, on the other hand, we will restrict the set of machines that<br />

each job may consider; that is, for each job there is just a subset of machines<br />

to which it can be assigned. This restriction arises naturally in a number of<br />

applications: for example, we may be seeking to balance load while maintaining<br />

the property that each job is assigned to a physically nearby machine, or<br />

to a machine with an appropriate authorization to process the job.<br />

More formally, each jobj has a fixed given size t] > 0 and a set of machines<br />

M~ ___ M that it may be assigned to. The sets ~ can be completely arbitrary.<br />

We call an assignment of jobs to machines feasible if each job j is assigned to<br />

a machine i e M]. The goal is still to minimize the maximum load on any<br />

machine: Using Ji _c J to denote the jobs assigned to a machine i e M in<br />

a feasible assignment, and using L~ = ~]~j; t] to denote the resulting load,<br />

637

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

Saved successfully!

Ooh no, something went wrong!