1 / 43

主題: Maximum flow

主題: Maximum flow. 解題技巧 問題定義 Ford-Fulkerson method Bipartite matching Minimum cost flow 例題講解 : A820, A10330, A563, A10080, H91.1 歷年題目. 問題定義. 給定一個 flow network G=(V, E) directed graph 兩個特殊的 vertex : s (source) 及 t (sink) 每一條 edge (u, v) 上有 capacity c[u, v]

media
Download Presentation

主題: Maximum flow

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 主題:Maximum flow • 解題技巧 • 問題定義 • Ford-Fulkerson method • Bipartite matching • Minimum cost flow • 例題講解: • A820, A10330, A563, A10080, H91.1 • 歷年題目

  2. 問題定義 • 給定一個 flow network G=(V, E) • directed graph • 兩個特殊的 vertex:s (source) 及 t (sink) • 每一條 edge (u, v) 上有 capacity c[u, v] • 求從 s 到 t 之間最大的運送量(flow) • 每條 edge 上的運送量不可以超過該 edge 上的 capacity

  3. 問題範例 • vertex 表示城市,edge表示高速公路,capacity 表示該段公路最大的運輸量 新竹 台中 12 v1 v3 20 16 s 台北 4 高雄 10 t 7 9 13 4 v2 v4 14 花蓮 台東

  4. s t s t 直覺想法 • 從 s 往 t 一直送,直到不能再送為止 • 正確,但需做一些修正 運送量 = 1 運送量 = 2

  5. s t 直覺想法再延伸 • 允許反悔:如果從 u 到 v 有大小為 x 的運送量,表示在這之後從 v 到也可以有至多為 x 的運送量,相反方向的同數量的運送量則會互消

  6. 定義flow • 運輸量=19 時可能的運法 flow capacity 12/12 v1 v3 15/20 11/16 s 1/4 10 t 7/7 4/9 8/13 4/4 v2 v4 11/14 • 紅字部份稱為這個 graph 的 flow • f[s, v1] = 11

  7. flow 必須符合以下性質 • 容量限制:f[u, v]  c[u, v] • 對稱性:f[u, v] = -f[v, u] • 守恆性:for all uV  {s, t}, 12/12 v1 v3 11/16 s 1/4 f[v1, s]+f[v1, v2] + f[v1, v3] = -11 + -1 + 12 = 0 10 v2

  8. 定義: residual graph Rf 12/12 v1 v3 c 及 f 15/20 11/16 s 1/4 10 t 7/7 4/9 8/13 4/4 v2 v4 Rf 11/14 12 v1 v3 5 5 11 4 15 s 可以想像為還有多少容量可以流過的圖 11 3 t 7 5 5 8 4 3 v2 v4 r[u, v] = c[u, v] – f[u, v] 11

  9. argumenting path 定義: augmenting path • augmenting path:在 Rf上任一條從 s 到 t 的 path Rf 12 v1 v3 5 5 11 4 15 s 11 3 t 7 5 5 8 4 3 v2 v4 11

  10. 使用之資料結構 • 將 capacity c[i, j],flow f[i, j] 及 residual graph 的 r[i, j] 以 3 個 nn 的 matrix 儲存 • c[i, j] 在程式執行過程中不會改變 • f[i, j] 初始值為 0,每次找到 augmenting path 之後會被更新 • r[i, j] = c[i, j] – f[i, j],找 augmenting path 時會利用到之 matrix

  11. 解法: Ford-Fulkerson method • 步驟1:把 f 歸零 • 步驟2: • 當 residual graph Rf還可以找到 augmenting path p • 以 augmenting path p 更新 flow f • 以 flow f 更新 residual graph Rf • 步驟3:回傳 f

  12. 找 augmenting path 的方法 • 從 s 開始做 DFS (depth first search),找出 s 到 t 的任意一條可能路徑 • 注意:DFS 是在 residual graph Rf上做 12 v1 v3 Rf 5 5 11 4 15 s 11 3 t 7 5 5 8 4 3 v2 v4 11

  13. v2 v3 s t s 12 更新 v2 0 -12 v3 19 更新 flow p s v2 v3 t m = min{ f[u, v] | edge (u, v) is on p} for each edge (u, v) on p f[u, v] = f[u, v] + m f[v, u] = - f[u, v] 5 4 5 m = 4 v2 v3 s t s 8 v2 -4 -8 v3 15

  14. 更新 residual graph • 以最新的 flow f 更新 residual graph Rf m = min{ f[u, v] | edge (u, v) is on p} for each edge (u, v) on p f[u, v] = f[u, v] + m f[v, u] = – f[u, v] r[u, v] = c[u, v] – f[u, v] r[v, u] = c[v, u] – f[v, u] 更新 residual graph Rf

  15. Maximum flow 的大小 • 計算從 s 流出的 flow 總和 12/12 v1 v3 19/20 11/16 s 1/4 10 t 7/7 9 12/13 4/4 v2 v4 11/14 Maximum flow = |f| = 11 + 12 = 23

  16. t  s    Multiple sources and sinks • 增加一個 super-source s,指向所有 si • 增加一個 super-sink t,所有 ti指向它 • 所有新增的 edge 之 capacity 設為  (可設為原圖中所有 capacity 的總和) s1 t1 s2 t2 s3

  17. 例題: A820 網路頻寬 • 假設在一個網路中有 n 個點,這 n 個點兩兩之間可能有一線路相連且此一連線有流量的限制(各連線不盡相同) • 連線的流量是無方向性的(undirected) • 給定 s 及 t 兩點,求 s 到 t 之間的最大頻寬,即從 s 到 t 的最大流量

  18. 解法: 將 undirected 轉為 directed 拆解為 20 20 1 2 1 2 20 1 2 3 4 c[i, j] 20 1 1 2 2 5 10 10 3 3 4 20 4

  19. 例題: A10330 電力輸送問題 • 從甲城市要輸電到乙城市 • 中間會經過一些電力轉換站,每個轉換站有本身的電力處理能力上限 • 各轉換站之間以電纜連接,甲、乙城也各以電纜跟這些轉換站相連,這些電纜各有各的電量流經上限 • 電纜的電流有方向性 • 求甲城可輸送到乙城的最大電量

  20. 3 12 拆解為 10 10 a1 a2 4 9 處理點上有流量限制的方法 • 解法:將每個轉換站拆為兩點 • 點 a 拆為 a1及 a2兩點 • a 的 in-edge 連到 a1,a 的 out-edge 連到 a2 • 新增一條 edge 從 a1到 a2,上面的 capacity 為 a 點的流量限制 3 12 10 a 4 9 10

  21. 例題: A563 搶匪逃逸路線 • 有一個城市的街道圖為方形網格,銀行座落在某些交點處 • 有一群搶匪想要搶銀行(每個人搶的銀行皆不相同) • 若逃到網格的外圍點就算逃逸成功,試問他們有沒有互不相交(不能共線或共點)的逃離路線

  22. 範例 • 有互不相交逃逸路線的例子 搶匪 逃逸路線

  23. s t 拆解為 入 出 解法: • 結合前面的三種技巧 • 網格上的 edge 由 undirected 拆為 directed • 網格上的點拆為兩點(一為進, 一為出) • 新增點 s 連至所有搶匪,點 t 至所有外圍點 匪

  24. Maximum flow 之應用: 配對問題 • maximum bipartite matching • 給定兩組人,一組為男生,一組為女生 • 男生與女生之間有一條 edge 表示互相同意交往 • 求最多的配對方法

  25. 甲男 甲女 乙男 t s 乙女 丙男 丙女 丁男 解法 • 以 multiple sources/sinks 方法解之,所有的 edge weight 皆為 1,maximum flow 即為最多的配對數

  26. 例題: A10080 地鼠逃生 • 在一個地圖上有 n 隻地鼠,m 個洞,一個洞只能躲一隻地鼠 • 地鼠與洞的位置為 2 維座標 • 地鼠的行走速度為 v • 老鷹來了,若地鼠不在 s 秒鐘內找到棲身之所就會被吃掉 • 試問最多可以救幾隻地鼠

  27. 解法: • 每一隻地鼠為左邊點 • 每一個洞為右邊點 • 對每一隻地鼠,連一條 edge 到座標為 sv 距離內的所有的洞 1 鼠 洞 2 1 3 a 2 a 3 sv = 3  0.5 = 1.5

  28. Minimum cost flow 問題 • Maximum flow 問題的更一般化版本 • directed graph • 兩個特殊的 vertex:s (source) 及 t (sink) • 每一條 edge (u, v) 上有 capacity c[u, v] • 每一條 edge (u, v) 上有 cost h[u, v],表示從 u 送一個單位到 v 所需要付出的代價 • 流量要求 x • 求由 s 送 x 個單位到 t 的最小 cost

  29. 1/3 1/3 3/5 3/5 s s t t 2/5 2/5 6/2 6/2 1/5 1/5 (33+31) + (23+22+21) = 12+ 12 = 24 範例 • 從 s 要送 5 單位到 t cost/capacity 3 2 (33+31) + (26+21) = 12+ 14 = 26

  30. 解法: 修改 Ford-Fulkerson method • 步驟1:把 f 與 sum 初始化為零 • 步驟2:當 sum < x • 在 Rf中找到cost 最小的 augmenting path p • 以 augmenting path p 更新 flow f 與 sum • 以 flow f 更新 residual graph Rf • 步驟3:回傳 f 的 cost

  31. 找 cost 最小的 augmenting path • 在 Rf上找一條由 s 到 t 的 shortest path • 以 h[u, v] 作為 edge length • 若 r[u, v] = 0 表示 edge (u, v) 不存在 在沒有edge 的地方,其 cost 值不需理它,因其 r[] 值恆為 0 h r  0 13 5 1 9 1 0 2 12

  32. 以 p 更新 flow f 及 sum 值 • 若 (sum + m) > x 表示這一次不必送這麼多的 flow,實際上只需再送 xsum 個單位 m = min{ f[u, v] | edge (u, v) is on p} if (sum+m) > x then m = x – sum; sum = sum + m for each edge(u, v) on p f[u, v] = f[u, v] + m f[v, u] = - f[u, v]

  33. 計算 minimum cost • 將所有 f[i, j]c[i, j] 加總 ans = 0 for i = 1 to n do for j = 1 to n do if f[i][j]>0 then ans = ans + f[i][j]  c[i][j] return ans

  34. Multiple sources and sinks • 每個 source 皆有其各自發送量,每個 sink 皆有其各自接收量,總發送量=總接數量 • 增加一個 super-source s 指向所有 si,edge capacity 為 si之原發送量 • 增加一個 super-sink t ,所有 ti 指向它,edge capacity 為 ti之原接收量 • 所有新增 edge 的cost 都設為 0

  35. 轉為 cost/capacity 0/5 t s 0/7 0/3 0/10 0/9 範例 送5 收7 送3 收10 送9

  36. 例題: H91.1 沙石供應場 • 甲、乙、丙三個地方在施工。此三個工地所需的砂石由 A、B、C 三個採砂場供應。A、B、C 三個採砂場每天分別可採 X1、X2 、 X3 噸,每噸生產費用分別為M1 、 M2 、 M3 元。而甲、乙、丙三地每天需用砂石分別為 Y1 、 Y2 、 Y3 噸 • 從 A 運往甲、乙、丙三工地每噸運費分別為 N1 、 N2 、 N3 元,從 B 運往甲、乙、丙三地每噸的運費分別為 N4 、 N5 、 N6 元,從 C 運往甲、乙、丙三地每噸運費分別為 N7 、 N8 、 N9 元 • 試計算滿足工地所需全部砂石的最少費用運輸方案

  37. 當工地與採砂場數目很小時 • 解法:暴力法 • 存在一組最佳解具有下列性質 • 把所有 edge 轉為 undirected 的情況下,運輸方案圖中不會有 circle(證明一) • 故運輸方案圖可視為一個 forest • 一定有一個 leaf 具有下面其中一種性質 • 若 leaf 為採砂場,它把沙全運輸到某一工地(證明二) • 若 leaf 為工地,它所需的沙全來自某一採沙場(明顯)

  38. < 證明一 • 利用反證法

  39. < 全送 剩 剩 證明二 • 利用反證法 剩 剩

  40. A 送甲 A 送乙 C 送丙 ... 或 或 ... A 已空 甲已滿 C 已空 丙已滿 recursive 乙 丙 甲 A B C

  41. 多工地與採砂場之解法 cost/capacity (M1+N1)/X1 (M1+N2)/X1 甲 A 0/Y1 0/X1 0/X2 0/Y2 t 乙 s B 0/Y3 0/X3 丙 C 發送量 = 接收量 = Y1 + Y2 + Y3

  42. 練習題 • 練習題 • A.820 Internet Bandwidth • http://acm.uva.es/p/v8/820.html • A.10330 Power Transmission • http://acm.uva.es/p/v103/10330.html • A.10080 Gopher II • http://acm.uva.es/p/v100/10080.html • A.10092 The Problem with the Problem Setter • http://acm.uva.es/p/v100/10092.html • A.670 The Dog Task • http://acm.uva.es/p/v6/670.html • A.753 A Plug for UNIX • http://acm.uva.es/p/v7/753.html

  43. 挑戰題 • 挑戰題 • A.563 Crimewave • http://acm.uva.es/p/v5/563.html • A.10511 Councilling • http://acm.uva.es/p/v105/10511.html • H. 91.1 (輸入較小時使用暴力法) • http://www.cc.nccu.edu.tw/info_race2002/codeq.htm • H. 91.6 (輸入較小時使用暴力法) • http://www.cc.nccu.edu.tw/info_race2002/codeq.htm • H. 88.2 (輸入較時使用暴力法) • http://www.cc.nccu.edu.tw/info_race88/Q.pdf

More Related