網路流、割與匹配

增廣路徑(augmenting path)

你已導引了一些水,想送更多。若你能沿著仍有空間的管子描出一條從抽水機到排水口的路線——可能還包含一些「撤銷」動作來拉回先前送出的水——那你就能一次沿整條路線推送額外的水。這樣的路線就是增廣路徑,找到一條就表示流還沒到最大。

精確地說,增廣路徑是殘餘網路 Gf 中一條從 s 到 t 的路徑,其上每條邊都有正的殘餘容量。它的瓶頸是路徑上最小的殘餘容量。要增廣,就在路徑的每條前向邊上把流量加上那個瓶頸量、在每條後向邊上減去它;這在維持容量與守恆的同時,恰好把流值增加一個瓶頸量。例如,若路徑 s -> a -> b -> t 的殘餘容量為 5、2、4,瓶頸是 2,於是你多推 2 單位,流值上升 2。由於其中某些邊可能是後向(撤銷)邊,增廣能把先前的流改道,而不只是加入新流。

增廣路徑是最大流演算法的基本動作:重複「找一條增廣路徑、沿之推送」,直到再也找不到為止。深刻的事實(增廣路徑定理)是:一個流是最大的,當且僅當它的殘餘網路沒有增廣路徑——所以這條簡單的停止規則恰好正確,而那一刻,無法抵達的頂點揭示了一個最小割。陷阱在於你選哪條路徑:任意選(樸素的福特-富爾克森)在無理數容量上可能很慢甚至不終止,而總是取最短的增廣路徑(埃德蒙茲-卡普)則保證增廣次數為多項式。

設目前的流在 s->a->t 上使 a->t 飽和,假設殘餘路徑 s -> b -> a -> t 存在,其中 b -> a 用一條後向殘餘邊(撤銷部分 a->b 的流)。它的瓶頸假設為 1;增廣推送 1 單位、把 a 的流改道,並使總量上升 1——這是樸素貪婪找不到的路徑。

路徑的瓶頸就是你的增益;後向邊讓增廣路徑得以撤銷並改道先前的選擇。

沒有增廣路徑就代表最大流——這是定理,不只是啟發式的停止。但路徑的選擇決定速度:任意選擇在無理數容量上可能呈指數或迴圈;最短路徑選擇(埃德蒙茲-卡普)則維持多項式。

又称
augmenting pathimproving path擴充路徑