This is an old revision of the document!
Chapter 7 - Network Flow
Section 7.1 - The Maximum-Flow Problem and the Ford-Fulkerson Algorithm
The section begins by defining the problem. We will be examining directed graphs with weights along the edges. These weights denote capacities of traffic that can pass through each node. The section dives into exactly what a flow network is. A flow network contains edges with a non-negative number as its capacity, a single source node s, and a single sink node t.
The section then defines what the flow function is, that is, the amount of traffic carried through a node. It maps each edge to a real number. For each edge, the flow of that edge must be less than or equal to that edge's capacity. Additionally, for each node v other than s and t, we have the summation of flow into v equal to the summation of flow out of v. And the value of a flow (for a graph) f, is defined to be the amount of flow generated at the source.
With all of this in mind, we are able to define the problem. Our goal is to find the maximum flow for a given network flow. The section begins by walking through different possible solutions to this problem. It concludes to push forward on edges with leftover capacity and push backwards on edges that are already carrying flow. We then define the residual graph of G. In the residual graph, the node set is the same. For every amount the flow of an edge is less than that edge's capacity, we have that many leftover units of capacity. We also create backwards edges with a capacity of the edge in question.
In order to solve the problem, the section lays out an augmenting path algorithm. This algorithm takes a flow f and an s-t path as inputs. It then considers each edge in the path. If the edge is a forward edge, then we increase the flow of e in G by the bottleneck, and decrease the flow of e in G by the bottleneck if the edge is a backward edge.
We use this algorithm to generate our Max-Flow algorithm. The max flow initially sets all flows equal to zero. And while there is an s-t path in the residual graph, we let P be an s-t path in the residual graph, let f' = augment(f,P), update f to be f', and update the residual graph to be the residual graph with this new flow f'.
The section then walks through a variety of different proofs which back up the intuition behind the algorithm. At every stage of the algorithm, the flow values and the residual capacities are integers. Later in the section, we denote the value C as the summation of capacities of edges out of s. The section walks through the proof that the algorithm terminates in at most C iterations of this summation. And it concludes this part of the section by outlining the proof that the Ford-Fulkerson Algorithm can be implemented to run in O(mC) time.
