I assume you are already familiar with linear algebra (systems of linear equations). If that's not the case, come talk to me.

A linear program is a system of linear inequalities, together with a linear objective function to be maximized or minimized. A simple example is:

- maximize x
_{1}+x_{2}subject to x_{1}≥ 0, x_{2}≥ 0, x_{1}+2x_{2}≤ 1, 3x_{1}+x_{2}≤ 1.

This linear program may also be written using matrices and vectors as follows:

- Let c=(1,1). Let b=(1,1). Let A be the matrix ((1,2),(3,1)).

- maximize c.x subject to x ≥ 0, Ax ≤ b.

Above, x=(x1,x2) is the vector of variables.

A *feasible solution* is an assignment to x that satisfies the given linear constraints.
For example, x=(1/4,1/4) is feasible.

An *optimal solution* is a feasible solution of maximum cost.

An optimal solution to any linear program can be found in polynomial time.

Linear programs of the form "maximize c.x subject to x ≥ 0, Ax ≤ b", where all coefficients are non-negative, are called "packing" problems. Linear programs of the form "minimize c.x subject to x ≥ 0, Ax ≥ b", where all coefficients are non-negative, are called "covering" problems.

Examples:

References:

- [Samir Khuller's notes] - a brief introduction
- Sections 14.1, 14.3 of Approximation Algorithms by Vijay Vazirani
- Section 4 of KleinAndYoung
- Chvatal (In ApproxAlgsReferences .)