Where the lecture picks up
- Goal of the day: faster max-flow algorithms — scaling, blocking flows, and how link-cut trees speed blocking flows up
0:27. - Setup carried over from last lecture: a capacitated directed graph
G = (V, E), every edgeewith capacityc_e1:17. - Capacities are integers in
[1, U]; the task is to find ans–tflow of maximum value1:59. - Integrality is assumed throughout — fractional capacities can be handled by clearing denominators; with fractions
log Ustops making sense as a bound unless you normalize somehow33:14,33:42,34:02. - Model: word RAM with words of at least
log nbits, so arithmetic/comparison on capacities costsO(1)14:47.
Flow constraints (restated)
- A flow is a vector on the edges
1:59. - Capacity constraints: never push more flow than an edge's capacity
2:43. - Conservation: flow out of
sequals flow intot; every other vertex has flow in = flow out2:43. - Value of a flow = amount leaving
s2:43. - Residual graph
G_f: residual capacity = original capacity minus the flow already on the edge, i.e. how much more can still be sent3:08. Flow pushed the opposite way counts as negative flow, so a reverse edge gets residual capacity (e.g.0 − (−1) = 1)47:31,48:04.
Ford–Fulkerson
- Algorithm: repeatedly find an augmenting path in the current residual graph, augment, rebuild the residual graph, stop when no augmenting path exists — this is correct
3:08,4:02. - Each augmenting path pushes at least one unit of flow; finding one path is linear in
mvia DFS or BFS4:50,5:29. - Running time:
O(m · f*),f*= value of the max flow5:29. - Why that is bad:
f*can be as large asn · U, and writing a capacity takes onlylog Ubits — so the runtime is exponential in the input's representation5:59. - Ford–Fulkerson leaves the path-selection rule open (DFS, BFS, max-bottleneck, ...), and the choice changes the bound
31:11,32:12.
Three flavors of "polynomial"
| Term | Running time depends on | Example |
|---|---|---|
| Weakly polynomial | poly(m, log U) — polynomial in the representation 6:33 | scaling algorithms 7:58 |
| Strongly polynomial | poly(m) only; step count independent of capacity magnitudes (arithmetic on capacities still assumed O(1)) 7:23 | blocking flows 7:58 |
| Pseudo-polynomial | poly(m, U) — worst of the three 7:23, 7:58 | Ford–Fulkerson 7:58; exact knapsack DP, whose state count is linear in total weight 8:18, 8:51 |
- The lecture will deliver one strongly polynomial and one weakly polynomial algorithm
7:58.