網路流、割與匹配

邊容量(edge capacity)

每根管子都有寬度:單位時間能通過的量有個硬上限。邊容量就是這個上限,附在流量網路的每條邊上。寬闊的高速公路容量高;狹窄的巷弄容量低。流量問題的核心正是:這些逐邊的上限合在一起,限制了從源點到匯點能運多少。

精確地說,邊 (u, v) 的容量是一個數 c(u, v) >= 0,任何流 f 在這條邊上都必須滿足容量約束 0 <= f(u, v) <= c(u, v)。若一條邊的流量等於其容量,f(u, v) = c(u, v),就稱它飽和(saturated)——它滿了,再也容不下。教科書問題中容量通常是整數,這帶來一個美好的結果(整數性定理):若所有容量都是整數,則存在一個最大流給每條邊指派整數值。正是這點讓網路流能解離散的匹配與選取問題——在那些問題裡,分數答案毫無意義。

在單一條邊上,容量是唯一限制流量的東西;接頭由守恆律處理。有幾個慣例值得小心。容量是有向的:c(u, v) 與 c(v, u) 可以不同,而沒有反向弧的邊其 c(v, u) = 0。若你想要一根雙向都能輸送、上限皆為 k 的無向管子,就用兩條容量各為 k 的有向邊來建模,或用特殊的殘餘規則。還有,容量是約束而非流量——一條高容量的邊大可完全不用。

若 c(u, v) = 5 而某流設 f(u, v) = 5,這條邊飽和,是瓶頸的候選。若改為 f(u, v) = 3,這條邊還剩 2 單位的空間——正是殘餘網路以一條容量 2 的前向殘餘邊所記錄的剩餘空間。

剩餘容量(c 減 f)正是演算法尋找的對象;飽和的邊在前向沒有任何剩餘。

整數容量保證存在整數最大流,但無理數容量可能讓樸素的福特-富爾克森永遠迴圈下去——所以容量的取值不是無害的小節;它影響演算法是否會終止。

又稱
capacityc(u,v)容量