
Harvard University · 1:27:09 · Watch on YouTube
Summary
A lecture on faster maximum-flow algorithms, picking up from a Ford–Fulkerson recap. Jelani Nelson first fixes the vocabulary — weakly polynomial, strongly polynomial, pseudo-polynomial — and surveys the best bounds known at the time (Orlin's O(mn), Goldberg–Rao, the then-days-old Lee–Sidford interior-point result). He then develops two techniques in detail: capacity scaling, which feeds capacities in one bit at a time and yields O(m² log U), and blocking flows, whose central claim is that each augmentation strictly increases the s–t distance, capping the number of rounds at n. The blocking-flow subroutine is an advance/retreat/augment DFS on the level graph, costing O(m) in unit-capacity graphs (O(m^{3/2}) overall, O(m√n) for bipartite matching) and O(mn) in general (O(mn²) overall), with link-cut trees teased as the fix that brings it to O(mn log n).
Topics
- Max-flow recap and complexity terminology
- State of the art for max flow
- Capacity scaling
- Blocking flows: levels, admissibility, definition
- The key claim: distances strictly increase
- Finding a blocking flow: advance / retreat / augment
- Sharper iteration bounds and bipartite matching
- General capacities and link-cut trees
flowchart TD
R["Ford–Fulkerson<br/>O(m·f*) — pseudo-polynomial"] --> S["Capacity scaling<br/>log U rounds, residual flow ≤ m"]
R --> B["Blocking flows<br/>≤ n rounds (distance strictly increases)"]
S --> S1["O(m² log U)<br/>weakly polynomial"]
B --> U["Unit capacity: O(m) per blocking flow"]
B --> G["General capacity: O(mn) per blocking flow"]
U --> U1["O(mn), refined to O(m^3/2)"]
U1 --> U2["Bipartite matching: O(m√n)"]
G --> G1["O(mn²)"]
G --> LC["+ link-cut trees (Sleator–Tarjan '83)<br/>O(m log n) per blocking flow"]
LC --> LC1["O(mn log n) — next lecture"]
S -.->|"scaling composes with<br/>any inner max-flow routine"| B
Key takeaways
- Ford–Fulkerson is pseudo-polynomial:
O(m · f*)withf*up ton·U, which is exponential in thelog Ubits used to write a capacity — motivating the whole lecture5:29,5:59. - Capacity scaling gives
O(m² log U):log Uiterations, and after shifting in one bit, a previously saturated cut of ≤medges gains at mostmresidual capacity, so the residual max flow per round is at mostm27:35,29:33. - Augmenting along a blocking flow strictly increases
d(s,t)— an equal-length path would have to use only old level-graph edges, one of which the blocking flow saturated — capping the algorithm atniterations42:44,57:23,49:39. - Unit-capacity graphs:
O(m)per blocking flow (each edge touchedO(1)times by the advance/retreat/augment DFS) ⇒O(mn), sharpened toO(m^{3/2})by thed + m/diteration bound minimized atd ≈ √m1:14:16,1:16:55,1:17:22. - Maximum bipartite matching in
O(m√n)via the layered unit-capacity flow reduction, beating Ford–Fulkerson'sO(mn)on the same instance1:20:26. - General capacities:
O(mn)per blocking flow (≤maugments ×O(n), ≤mretreats, ≤mnadvances) ⇒O(mn²); link-cut trees reduce this toO(m log n)per blocking flow andO(mn log n)overall — the 1983 bound that stood until Orlin'sO(mn)in 20131:24:43,1:25:32,1:26:22,9:21. - The two weakly polynomial front-runners are incomparable: Goldberg–Rao wins on sparse graphs (
m ≪ n^{3/2}), Lee–Sidford's interior-pointÕ(m√n log² U)wins on dense ones11:41,12:33.