Table of Contents
7.7 Extensions to the Maximum-Flow Problem
The Problem: Circulations with Demands
- Directed graph G = (V, E)
- Edge capacities c(e), e ∈ E
- Node supply and demands d(v), v ∈ V:
- If d(v) > 0: node v has demand of d(v) flow–> The node is a sink and wishes to receive d(v) units more flow than it sends out
- If d(v) < 0: The node v has a supply of -d(v)–> The node is a source and wishes to send out -d(v) units more flow than it receives
- If d(v) = 0: Then the node is neither a source nor a sink.
- A circulation is a function that satisfies:
- For each e ∈ E: 0 ≤ f(e) ≤ c(e) (capacity condition)
- For each v ∈ V: fin(v) - fout(v) = d(v)(Demand conditions)
- Feasibility Problem: We want to know if there exists a circulation that satisfies the just-mentioned conditions
- If there exists a feasible circulation with demands {d(v)}, then ∑v d(v) =0
Designing And Analyzing an Algorithm for Circulations
- The problem of finding feasible circulation can be reduced to the problem of finding a maximum s-t flow in a different network.
- Add new source s and sink t
- For each v with d(v) < 0, add edge (s, v) with capacity -d(v)
- For each v with d(v) > 0, add edge (v, t) with capacity d(v)
- ∑v:d(v)>0d(v) = ∑v:d(v)< 0-d(v). Let's call this common value D.
- Claim: G has circulation iff G' has max flow of value D
- Given (V, E, c, d), there does not exist a circulation iff there exists a node partition (A, B) such that:
- Σv∈B d(v) > cap(A, B) ⇒ demand by nodes in B exceeds supply of nodes in B + max capacity of edges going from A –> B
The Problem: Circulations with Demands And Lower Bounds
- In many problems, not only do we want to satisfy demands at various nodes, but we also want to enforce the flow to make use of certain edges.
- That's why we need to place lower bounds on edges as well as the upper bounds restricted by the capacities
- Feasible circulation
- Directed graph G = (V, E)
- Edge capacities c(e) and lower bounds l(e)(Force flow to use certain edges), e ∈ E
- Node supply and demands d(v), v ∈ V
- A circulation is a function that satisfies:
- For each e ∈ E: 0 ≤ l(e) ≤ f(e) ≤ c(e) (capacity)
- For each v ∈ V: fin(v) - fout(v) = d(v)(conservation)
- Goal: Decide whether or not there exists a feasible circulation(the circulation that satisfies the above conditions)
Designing And Analyzing an Algorithm with Lower Bounds
- Strategy: Reduce the problem to the one of finding a circulation with demands but no lower bounds, which can in turn be reduced to the Maximum-Flow Problem.
- How to proceed?:
- On each edge, we need to send at least l(e) units of flow.
- Update demands of both endpoints
I give this section a 7/10.