Note: in step 3, the path p can be found using a shortest path computations, depending on the set of paths P. For example, if P contains all paths going from si to ti for some set of pairs of vertices {(s1,t1), (s2,t2), …, (sk, tk)}, then the path can be found using k shortest path computations. |
Let G=(V,E) be a directed graph and let P be a (possibly large) collection of paths through the graph. A multicommodity flow f assigns a flow f(p) to each path p∈ P. The size of the flow, |f|, is the total flow assigned: ∑p∈ P f(p). We let f(e) for any edge e denote the total flow sent across edge e: f(e) = ∑p∈ P, p∋ e f(p). The congestion of the flow, cong(f), is the maximum amount of flow crossing any edge: maxe∈ E f(e). Given a budget C, the goal is to find a flow of congestion at most C maximizing the size of the flow.
Algorithm (given ε > 0):
1. Let f(p) = 0 for each p ∈ P. 2. Repeat until cong(f) = C : 3. Choose a path p ∈ P minimizing ∑e∈ p (1+ε)f(e). 4. Let f(p) = f(p) + 1. (Send a unit of flow along P.) 5. Return f.
Note: in step 3, the path p can be found using a shortest path computations, depending on the set of paths P. For example, if P contains all paths going from si to ti for some set of pairs of vertices {(s1,t1), (s2,t2), …, (sk, tk)}, then the path can be found using k shortest path computations.
thm: Assuming C ≥ \ln(m)/ε2 and ε ≤ 1/2 the algorithm returns a flow of size at least (1-O(ε)) OPT.
proof: