Bài giảng Lý thuyết đồ thị - Chương 6: Bài toán luồng cực đại

Bổ đề 1. Trong suốt thuật toán, độ dài đường tăng ngắn nhất không khi nào bị giảm. CM sau. Bổ đề 2. Sau nhiều nhất m đường tăng ngắn nhất, độ dài đường tăng ngắn nhất sẽ tăng ngặt. CM sau. Định lý. Thuật toán đường tăng luồng ngắn nhất đòi hỏi thời gian tính O(m2n). CM O(m+n) thời gian để tìm đường ngắn nhất nhờ sử dụng BFS. O(m) lần tăng đối với đường đi có đúng k cung. Nếu có đường tăng thì luôn tìm được đường tăng là đơn.  1  k < n  O(mn) lần tăng  Thời gian của thuật toán là O(mn(m+n)) = O(m2n).

ppt83 trang | Chia sẻ: huongthu9 | Lượt xem: 439 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lý thuyết đồ thị - Chương 6: Bài toán luồng cực đại, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 6 Bài toán luồng cực đại Maximum Flow Problemwsvutz3/31/91/13/34/74/63/51/13/52/2cBài toán luồng cực đại Maximum Flow Problemwsvutz3/31/91/13/34/74/63/51/13/52/2c3NỘI DUNG Bài toán luồng cực đại trong mạng. Lát cắt, Đường tăng luồng. Định lý về luồng cực đại và lát cắt hẹp nhất. Thuật toán Ford-Fulkerson Thuật toán Edmond-Karp. Các ứng dụng4L. R. Ford; D. R. Fulkerson (1962). Flows in Networks. Princeton, NJ: Princeton University Press. 5Lester Randolph Ford, Jr (1927 ~)Lester Randolph Ford, Jr. (born September 23, 1927), son of Lester R. Ford, Sr., is an American mathematician specializing in network flow programming. His 1956 paper with D. R. Fulkerson on the maximum flow problem established the maxflow-mincut theorem.6Delbert Ray Fulkerson (August 14, 1924 - January 10, 1976)Delbert Ray Fulkerson was a mathematician who co-developed the Ford-Fulkerson algorithm, one of the most used algorithms to compute maximal flows in networks. Ph.D, Univ. of Wisconsin-Madison, 1951. In 1956, he published his famous paper on the Ford-Fulkerson algorithm together with Lester Randolph Ford. In 1979, the renowned Fulkerson Prize was established which is now awarded every three years for outstanding papers in discrete mathematics jointly by the Mathematical Programming Society and the American Mathematical Society. 2008/5/2Network Flowsst31143222111121864 pages!Ravindra K. Ahuja, Thomas Magnanti and James Orlin. Network Flows. Prentice Hall, 1993.8Mạng và luồng trong mạng9 MẠNG (Network)Mạng là đồ thị có hướng G = (V,E) :Có duy nhất một đỉnh s không có cung đi vào gọi là đỉnh phát (nguồn) và duy nhất một đỉnh t không có cung đi ra gọi là đỉnh thu (đích).Mỗi cung e của G được gắn với một số không âm c(e) được gọi là khả năng thông qua của e. Ví dụ:wsvutz391376515210LUỒNG TRONG MẠNG Định nghĩa. Luồng f trong mạng G=(V,E) là phép gán số f(e) cho mỗi cạnh e ( f(e) được gọi là luồng trên cạnh e) thoả mãn các điều kiện:1) Hạn chế về khả năng thông qua (Capacity Rule): Với mỗi cung e, 0  f (e)  c(e)2) Điều kiện cân bằng luồng (Conservation Rule): Với mỗi v  s, t trong đó E-(v) và E+(v) tương ứng là tập các cung đi vào và đi ra khỏi đỉnh v. Định nghĩa. Giá trị của luồng f là (Đẳng thức (*) thu được bằng cách cộng tất cả các điều kiện cân bằng luồng.)11LUỒNG TRONG MẠNG – Ví dụTrong 2 số viết bên mỗi cạnh: giá trị luồng trên cạnh là số màu đỏ, số còn lại là khả năng thông qua. Các điều kiện 1) và 2) được thoả mãn => f là luồng trên mạng.Giá trị luồng là: 8 = f(s,v) + f(s,u) + f(s,w) = f(v,t) + f(w,t) + f(z,t)wsvutz3/32/91/11/33/72/64/51/13/52/2Ví dụ:12Bài toán luồng cực đạiLuồng trong mạng G được gọi là luồng cực đại nếu trong số tất cả các luồng trong mạng G nó là luồng có giá trị lớn nhất Bài toán tìm luồng cực đại trong mạng G được gọi là bài toán luồng cực đạiwsvutz3/32/91/11/33/72/64/51/13/52/2wsvutz3/32/91/13/33/74/64/51/13/52/2Luồng với giá trị 8 = 2 + 3 + 3 = 1 + 3 + 4Luồng cực đại có giá trị 10 = 4 + 3 + 3 = 3 + 3 + 413Mạng: G = (V, E, s, t, c) .(V, E) = đồ thị có hướng, không có cung lặp.Có hai đỉnh đặc biệt: s = phát/nguồn (source), t = thu/đích (sink).c(e) = khả năng thông qua (capacity) của cung e.MạngCapacitys234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 414Luồng từ s đến t là hàm f: E  R thoả mãn:Với mỗi e  E: 0  f(e)  c(e) (hạn chế kntq)Với mỗi v  V – {s, t}: (cân bằng luồng)Luồngs234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 4400000004404000kntqCapacityLuồngFlow15Bài toán luồng cực đại: Tìm luồng có tổng luồng trên các cạnh đi ra khỏi đỉnh phát là lớn nhất: Luồngs234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 44000000044040Giá trị = 400kntqLuồng16Luồng có giá trị 24 trong mạng:Luồngs234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 410661111110388040Giá trị = 2400kntqLuồng17Luồng có giá trị 28 trong mạng:Luồngs234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 410991414410489100Giá trị = 2800kntqLuồng18Luồng trong mạngtruyền thôngMạngtrạm giao dịch, máy tính, vệ tinhĐỉnhCungcáp nối, cáp quang, Luồngvoice, video, packetsmạng điệncổng, registers, processorsdây dẫndòng điệncơ khíjointsrods, beams, springsheat, energythuỷ lợihồ chứa, trạm bơm,nguồn nướcđường ốngdòng nước, chất lỏngtài chínhnhà bănggiao dịchtiềngiao thôngsân bay, ga tàu, giao lộđường cao tốc, ray, đường bayhàng hoá, phương tiện, hành kháchhoá họcsitesbondsenergy19Luồng trong mạngcommunicationMạngtelephone exchanges, computers, satellitesĐỉnhCungcables, fiber optics, microwave relaysLuồngvoice, video, packetscircuitsgates, registers, processorswirescurrentmechanicaljointsrods, beams, springsheat, energyhydraulicreservoirs, pumping stations, lakespipelinesfluid, oilfinancialstocks, currencytransactionsmoneytransportationairports, rail yards, street intersectionshighways, railbeds, airway routesfreight, vehicles, passengerschemicalsitesbondsenergy20Network reliability.Security of statistical data.Distributed computing.Egalitarian stable matching.Distributed computing.Many many more . . .Các ứng dụng/qui dẫnNetwork connectivity.Bipartite matching.Data mining.Open-pit mining. Airline scheduling.Image processing.Project selection.Baseball elimination.21Lát cắt – Đường tăng luồng22Lát cắt là cách phân hoạch tập đỉnh (S, T) sao cho s  S, t  T.Khả năng thông qua cap(S,T) của lát cắt (S, T) là số:Lát cắt (Cuts)s234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 4kntq = 30Lát cắt nhỏ nhất (hẹp nhất) là lát cắt với kntq nhỏ nhất.23Lát cắt (S1, T1), S1={s,2,3,4}, T={5,6,7,t) có khả năng thông qua 62:Lát cắts234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 4cap(S1,T1)= 6224Lát cắt (S2, T2), S2={s,3,4,7}, T2={2,5,6,t) có khả năng thông qua 28:Lát cắts234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 4cap(S2,T2) = 2825Bổ đề 1. Giả sử f là luồng, và (S, T) là lát cắt. Khi đó giá trị luồng chảy qua lát cắt chính bằng giá trị của luồng:trong đó S  T = {(v,w)E: vS, wT} và T S = {(v,w)E: vT, w S}Luồng và lát cắts234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 4Giá trị = 24106610100104880400026Bổ đề 1. Giả sử f là luồng, và (S, T) là lát cắt. Khi đó giá trị luồng chảy qua lát cắt chính bằng giá trị của luồng:Luồng và lát cắt1066101001048804000s234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 4Giá trị = 2427Bổ đề 1. Giả sử f là luồng, và (S, T) là lát cắt. Khi đó giá trị luồng chảy qua lát cắt chính bằng giá trị của luồng:Luồng và lát cắt106610100104880400s234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 4Giá trị = 24028Luồng và lát cắtChứng minh bổ đề: Giả sử f là luồng còn (S, T) là lá cắt. Khi đó SCM. Cộng tất cả các ràng buộc cân bằng luồng theo mọi vS, đơn giản biểu thức ta thu được:svtuwtừ đó suy ra đẳng thức cần chứng minhtổng theo các cung xanhtổng theo các cung tímT29Bổ đề 2. Giả sử f là luồng, còn (S, T) là lát cắt. Khi đó, val(f) cap(S, T).CM.Luồng và lát cắtstST 76 8430Luồng cực đại và lát cắt nhỏ nhất Max Flow and Min CutHệ quả. Giả sử f là luồng, còn (S, T) là lát cắt. Nếu val(f) = cap(S, T), thì f là luồng cực đại còn (S, T) là lát cắt hẹp nhất.CM. Xét f’ là luồng bất kỳ và (S’,T’) là lát cắt bất kỳ. Theo bổ đề ta có val(f’)  cap(S,T) = val(f)  cap(S’,T’). s234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 410991414410489100Giá trị luồng = 2800kntq của lát cắt = 2831Định lý về luồng cực đại và lát cắt nhỏ nhất Max-Flow Min-Cut TheoremĐinh lý (Ford-Fulkerson, 1956): Trong mạng bất kỳ, giá trị của luồng cực đại luôn bằng khả năng thông qua của lát cắt nhỏ nhất.Proof (muộn hơn).s234567t 15 5 30 15 10 8 15 9 6 10 10 10 15 4 410991515410489100Flow value = 2800Cut capacity = 2832Ý tưởng thuật toánThuật toán tham lam:Bắt đầu từ luồng 0 (Luồng có giá trị = 0).Tìm đường đi P từ s đến t trong đó mỗi cung thoả mãn f(e) 0 }.Khả năng thông quavw 176kntqLuồngKntq Kntqvw 11 6e = (u,v)  eR = (v,u)38Đồ thị tăng luồng - Ví dụĐồ thị tăng luồng: Gf = (V, Ef ).Ef = {e : f(e) 0}.cf(e) cho biết lượng lớn nhất có thể tăng luồng trên cung e.cf(eR) cho biết lượng lớn nhất có thể giảm luồng trên cung e.s4253t 10 13 10 4001010100 40 4 4Gs4253t 10 10 10 4 4 4 4 3Gf39Đường tăng luồngĐường tăng luồng = đường đi từ s đến t trên đồ thị tăng luồng Gf.Khả năng thông qua của đường đi P là cf (P) = min {cf (e): e  P }.s4253t 10 13 10 4001010100 40 4 4 3G44644XXXXXs4253t 10 10 10 4 4 4 4Gfcf (P) = 440Đường tăng luồngĐường tăng luồng = đường đi từ s đến t trên đồ thị tăng luồng.Luồng là cực đại  không tìm được đường tăng luồng???Giá trị luồng = 14s4253t 10 13 10 444106104 44 4 4Gs4253t 10 6 10 4 4 4 4 7Gf41Định lý về luồng cực đại và lát cắt nhỏ nhấtĐịnh lý đường tăng luồng (Ford-Fulkerson, 1956): Luồng là cực đại khi và chỉ khi không tìm được đường tăng luồng. Định lý về luồng cực đại và lát cắt nhỏ nhất (Ford-Fulkerson, 1956): Giá trị của luồng cực đại bằng khả năng thông qua của lát cắt nhỏ nhất.Ta sẽ chứng minh định lý tổng hợp sau:Định lý. Giả sử f là luồng trong mạng. Ba mệnh đề sau là tương đương (i) Tìm được lát cắt (S, T) sao cho val(f) = cap(S, T). (ii) f là luồng cực đại. (iii) Không tìm được đường tăng luồng f. 42Chứng minh định lýChứng minh. (i)  (ii)Suy từ hệ quả của Bổ đề 2.(ii)  (iii)Chứng minh bằng lập luận phản đề (contrapositive): Nếu tìm được đường tăng thì f không là luồng cực đại. Thực vậy, nếu tìm được đường tăng P, thì tăng luồng dọc theo P ta thu được luồng f’ với giá trị lớn hơn.43Chứng minh định lý(iii)  (i)Giả thiết: f là luồng và Gf không chứa đường đi từ s đến t.Gọi S là tập các đỉnh đạt tới được từ s trong Gf.Theo định nghĩa s  S, và theo giả thiết t  STa có f(e) = 0, e  TS, f(e) = c(e), e  STTừ đó suy raMạng đã cho GstST44Thuật toán Ford – FulkersonAugment(f,P)b  cf(P) FOR e  P DO IF (e  E) THEN // cạnh thuận f(e)  f(e) + b ELSE // cạnh nghịch f(eR)  f(e) – bRETURN fTăng luồng f dọc theo đường tăng PFord_Fulkerson(G,c,s,t);FOR e  E DO // Khởi tạo luồng 0 f(e)  0Gf  đồ thị tăng luồng fWHILE (tìm được đường tăng luồng P) DO f  augment(f, P) Sửa lại GfRETURN fThuật toán Ford-FulkersonVí dụ45Thời gian tínhGiả thiết: tất cả các khả năng thông qua là các số nguyên trong khoảng từ 0 đến C.Bất biến: mỗi giá trị luồng f(e) và mỗi khả năng thông qua cf (e) luôn luôn là số nguyên trong quá trình thực hiện thuật toán.Định lý: Thụât toán dừng sau không quá val( f *)  nC lần lặp.CM. Sau mỗi lần tăng luồng, giá trị của luồng tăng thêm ít nhất 1. Hệ quả. Thời gian tính của thuật toán F-F là O(m.n.C)Hệ quả: Nếu C = 1, thì thuật toán đòi hỏi thời gian O(mn).46Thời gian tínhGiả thiết: tất cả các khả năng thông qua là các số nguyên trong khoảng từ 0 đến C.Bất biến: mỗi giá trị luồng f(e) và mỗi khả năng thông qua cf (e) luôn luôn là số nguyên trong quá trình thực hiện thuật toán.Định lý: Thụât toán dừng sau không quá val( f *)  nC lần lặp.CM. Sau mỗi lần tăng luồng, giá trị của luồng tăng thêm ít nhất 1. Hệ quả: Nếu C = 1, thì thuật toán đòi hỏi thời gian O(mn).Định lý về tính nguyên: Nếu kntq là các số nguyên, thì luôn tồn tại luồng cực đại với giá trị luồng trên các cung là các số nguyên.Chú ý: Thuật toán có thể không dừng nếu kntq là không nguyên. Hơn thế nữa thuật toán còn không hội tụ đến lời giải tối ưu.47Thuật toán Ford-Fulkerson: Thời gian hàm mũQuestion: Thuật toán Ford-Fulekerson có phải là thuật toán đa thức? (thuật toán với thời gian tính bị chặn bởi đa thức bậc cố định của độ dài dữ liệu vào)Answer: Không phải. Nếu kntq lớn nhất là C thì thuật toán có thể phải thực hiện cỡ C bước lặp.Ví dụ:4810900s42t 1109109000Thuật toán F-F không là thuật toán đa thức1094910900s42t 1109109000Thuật toán F-F không là thuật toán đa thức109111XXX5010910s42t109110Thuật toán F-F không là thuật toán đa thức109109 15110910s42t 1109109110Thuật toán F-F không là thuật toán đa thức109101XXX52s42t 110910910910901111Thuật toán F-F không là thuật toán đa thức2109 lần lặp.Ví dụ Zwick xây dựng ví dụ sau đây cho thấy thuật toán F-F có thể không dừng, nếu như khả năng thông qua là số vô tỷ53 Có 6 cung với khả năng thông qua X, 2 cung khả năng thông qua 1 và một cung khả năng thông qua  = (sqrt(5)-1)/20.618034...stX1XX1XXXĐể chỉ ra thuật toán không dừng, ta có thể theo dõi khả năng thông qua của 3 cung nằm ngang của đồ thị tăng luồng trong quá trình thực hiện thuật toán. (Khả năng thông qua của 6 cung còn lại ít nhất là X-3).54stX1XX1XXXThực hiện thuật toán FFThuật toán FF bắt đầu bởi việc sử dụng đường tăng luồng trung tâm trong hình vẽ trên. Giá trị luồng tăng thêm được 1. Val(f)=1.Trên đồ thị tăng luồng: Các cung nằm ngang theo thứ tự từ trái sang có khả năng rút gọn là 1, 0, 55stX1XX1XXXst10Thực hiện thuật toán FF56stBstststX1XX1XXXCAThực hiện thuật toán FFGiả sử ở đầu lần lặp k các cung đó có khả năng thông qua là k-1, 0, k. Khi đó1) Tăng luồng dọc theo B thêm k, kntq của chúng trở thành k+1, k, 02) Tăng luồng dọc theo C thêm k, kntq của chúng trở thành k+1, 0, k,3) Tăng luồng dọc theo B thêm k+1, kntq của chúng trở thành 0, k+1, k+2,4) Tăng luồng dọc theo A thêm k+1, kntq của chúng trở thành k+1, 0, k+2, Sau 4 lần tăng, giá trị của luồng tăng thêm là 2(k+k+1)=2k+2Sau 4n+1 lần tăng luồng, khả năng thông qua sẽ là 2n-2, 0, 2n-1, Khi số lần tăng luồng ra vô cùng, giá trị của luồng sẽ là Mặc dù dễ thấy là giá trị của luồng cực đại trong mạng này là 2X+1. 5758Chọn đường tăng luồng như thế nào?Cần hết sức cẩn thận khi lựa chọn đường tăng, bởi vìMột số cách chọn dẫn đến thuật toán hàm mũ.Cách chọn khôn khéo dẫn đến thuật toán đa thức.Nếu kntq là các số vô tỷ, thuật toán có thể không dừngMục đích: chọn đường tăng sao cho:Có thể tìm đường tăng một cách hiệu quả.Thuật toán đòi hỏi thực hiện càng ít bước lặp càng tốt.Chọn đường tăng với (Edmonds-Karp 1972, Dinitz 1970) khả năng thông qua lớn nhất. (đường béo - fat path)khả năng thông qua đủ lớn. (thang độ hoá kntq – capacity scaling)số cạnh trên đường đi là ít nhất. (đường ngắn nhất - shortest path)59Thang độ hoá kntq (Capacity Scaling)Trực giác: chọn đường đi với kntq lớn nhất sẽ tăng giá trị luồng lên nhiều nhất.Không cần quan tâm đến tìm đường với kntq lớn nhất.Chọn thông số thang độ .Gọi Gf () là đồ thị con của đồ thị tăng luồng chỉ gồm các cung có kntq ít nhất là .110s42t 1170102122Gf110s42t170102122Gf (100)60Thuật toán Capacity Scaling    / 2 RETURN fWHILE (tìm được đường đi P từ s đến t trong Gf()) f  augment(f, P) Hiệu chỉnh Gf()ScalingMaxFlow(V, E, s, t, c)FOR e  E, f(e)  0q = min { k  Z : 2k  C };  = 2q WHILE (  1) Xây dựng đồ thị Gf()Pha nấc 61Tính đúng đắn của thuật toán Capacity ScalingGiả thiết. Khả năng thông qua của các cung là các số nguyên trong khoảng từ 1 đến C.Tính bất biến. Mọi luồng và khả năng thông qua trong suốt quá trình thực hiện thuật toán luôn là số nguyên. Tính đúng đắn: Nếu thuật toán kết thúc thì f là luồng cực đại.Chứng minh. Theo tính bất biến, khi  = 1  Gf() = GfPha nấc  = 1 kết thúc khi không tìm được đường tăng luồngVậy f là luồng cực đại.62Thời gian tính của Capacity ScalingBổ đề 1. Vòng lặp ngoài lặp 1 + log2 C lần.CM. Thoạt tiên C   < 2C, và  chỉ còn một nửa sau mỗi lần lặp.Bổ đề 2. Giả sử f là luồng tại thời điểm kết thúc pha nấc . Thế thì giá trị của luồng cực đại không vượt quá val( f ) + m .CM. Xem Silde tiếp theoBổ đề 3. Có nhiều nhất là 2m lần tăng luồng tại mỗi pha nấc .Gọi f là luồng tại cuối pha nấc 2 (là pha ngay trước pha nấc ).Từ BĐ2  val(f*)  val( f ) + m (2).Mỗi lần tăng trong pha nấc  tăng giá trị cuả val( f ) lên ít nhất .Định lý. Thuật toán Scaling max-flow kết thúc sau không quá O(m log C) lần tăng luồng và có thể cài đặt với thời gian O(m2 log C ).63Capacity Scaling: AnalysisBổ đề 2. Giả sử f là luồng tại thời điểm kết thúc pha nấc . Thế thì giá trị của luồng cực đại không vượt quá val( f ) + m .CM. Ta sẽ chỉ ra là khi kết thúc pha nấc  phải tìm được lát cắt (S, T) sao cho cap(S, T)  val( f ) + m .Gọi S là tập các đỉnh đạt tới được từ s trong Gf().rõ ràng s  S, và t  S theo định nghĩa của SstMạng đã choST6410900s42t 1109109000Ví dụC = 109; q = 30; 0= 230 = 1 073 741 824; Gf(230) = (V,)10965Ví dụĐường tăng luồng: s, 4, t 109s42t109109109Gf(229)1091090s42t1091090109109G 1 066Ví dụĐường tăng luồng: s, 2, ts42t109Gf(229)109109109s42t109109109109109 G 1 010910910967Ví dụKết thúc pha nấc 229s42tGf(229)109109109s42t109109109109109G 1 010910910910968Ví dụGf(2k), k = 28, 27, ..., 2, 1 như nhau. Các pha nấc 2k kết thúc mà không tăng được luồng s42tGf(2k), k=28, 27, ...,,2,1109109109s42t109109109109109G 1 010910910910969Ví dụTrên Gf(1) không tìm được đường đi từ s đến t. Thuật toán kết thúc.s42tGf(1)109109109s42t109109109109109 G 1 01091091091091Do Gf(1) ≡ Gf nên trên Gf không tìm được đường đi từ s đến t. Vậy luồng đang có trong mạng là cực đại. 70Chọn đường tăng luồng như thế nào?Cần hết sức cẩn thận khi lựa chọn đường tăng, bởi vìMột số cách chọn dẫn đến thuật toán hàm mũ.Cách chọn khôn khéo dẫn đến thuật toán đa thức.Nếu kntq là các số vô tỷ, thuật toán có thể không dừngMục đích: chọn đường tăng sao cho:Có thể tìm đường tăng một cách hiệu quả.Thuật toán đòi hỏi thực hiện càng ít bước lặp càng tốt.Chọn đường tăng với (Edmonds-Karp 1972, Dinitz 1970) khả năng thông qua lớn nhất. (đường béo - fat path)khả năng thông qua đủ lớn. (thang độ hoá kntq – capacity scaling)số cạnh trên đường đi là ít nhất. (đường ngắn nhất - shortest path)2008/5/2Edmonds – Karp AlgorithmEdmonds and Karp, JACM 1972 Nếu đường tăng được chọn là đường ngắn nhất từ s đến t, thì thời gian tính của thuật toán sẽ là O(|E|2 |V|). 2008/5/2Jack EdmondsJack Edmonds is a Canadian mathematician, regarded as one of the most important contributors to the field of combinatorial optimization. He was the recipient of the 1985 John von Neumann Theory Prize.From 1969 on, with the exception of 1991-1993, he held a faculty position at the Department of Combinatorics and Optimization at the University of Waterloo's Faculty of Mathematics. Edmonds retired in 1999.2008/5/2Richard Karp, 1935~ “Reducibility Among Combinatorial Problems”, 1972 Turing Award in 1985. Harvard University,Bachelor's degree in 1955, Master's degree in 1956, and Ph.D. in applied mathematics in 1959. IBM's Thomas J. Watson Research Center Professor, UC Berkeley, 1968. Apart from a 4-year period as a professor at the University of Washington, he has remained at Berkeley.74Thuật toán đường tăng ngắn nhấtÝ tưởng: Tìm đường tăng luồng nhờ thực hiện BFS.Dễ thực hiện.Đường tăng có ít cạnh nhất. FOREACH e  E f(e)  0Gf  đồ thị tăng luồng (residual graph)WHILE (tồn tại đường tăng) tìm đường tăng P bởi BFS f  augment(f, P) hiệu chỉnh GfRETURN fShortestAugmentingPath(V, E, s, t)75Đường tăng ngắn nhất: Các kết quả Bổ đề 1. Trong suốt thuật toán, độ dài đường tăng ngắn nhất không khi nào bị giảm.CM sau.Bổ đề 2. Sau nhiều nhất m đường tăng ngắn nhất, độ dài đường tăng ngắn nhất sẽ tăng ngặt.CM sau.Định lý. Thuật toán đường tăng luồng ngắn nhất đòi hỏi thời gian tính O(m2n).CMO(m+n) thời gian để tìm đường ngắn nhất nhờ sử dụng BFS.O(m) lần tăng đối với đường đi có đúng k cung.Nếu có đường tăng thì luôn tìm được đường tăng là đơn.  1  k < n  O(mn) lần tăng  Thời gian của thuật toán là O(mn(m+n)) = O(m2n).76Phân tích thuật toán ĐTNNĐồ thị mức LG của G=(V, E, s).Với mỗi đỉnh v, xác định (v) là độ dài (theo số cung) của đường đi ngắn nhất từ s đến v.Gọi LG = (V, EG) là đồ thị con của G chỉ chứa các cung (v,w)  E với (w) = (v) + 1.s2356t = 0 = 1 = 2 = 3s2356t LG:G:77Phân tích thuật toán ĐTNNĐồ thị mức LG của G=(V, E, s).Với mỗi đỉnh v, xác định (v) là độ dài (theo số cung) của đường đi ngắn nhất từ s đến v.Gọi LG = (V, EG) là đồ thị con của G chỉ chứa các cung (v,w)  E với (w) = (v) + 1.Có thể tính LG với thời gian O(m+n) nhờ sử dụng BFS.P là đường đi ngắn nhất từ s đến v trên G khi và chỉ khi nó là đường đi từ s đến v trên LG.s2356t = 0 = 1 = 2 = 3 L:78Phân tích thuật toán ĐTNNBổ đề 1. Trong suốt thuật toán, độ dài đường tăng ngắn nhất không khi nào bị giảm.CM. Giả sử f và f' là luồng trước và sau khi tăng luồng theo đường ngắn nhất. Gọi L và L' là hai đồ thị mức của Gf và Gf 'Chỉ có cung nghịch được bổ sung vào Gf 'đường đi với cung nghịch có độ dài lớn hơn độ dài trước ■s2356t = 0 = 1 = 2 = 3 Ls2356t L'79Phân tích thuật toán ĐTNNBổ đề 2. Sau nhiều nhất m đường tăng ngắn nhất, độ dài đường tăng ngắn nhất sẽ tăng ngặt.CM: Có ít nhất một cung (cung có kntq bé nhất) bị loại khỏi L sau mỗi lần tăng luồng.Không có cung mới được thêm vào L cho đến khi độ dài đường ngắn nhất là tăng ngặt. ■s2356t = 0 = 1 = 2 = 3 Ls2356t L'80Đường tăng ngắn nhất: Các kết quả Bổ đề 1. Trong suốt thuật toán, độ dài đường tăng ngắn nhất không khi nào bị giảm.Bổ đề 2. Sau nhiều nhất m đường tăng ngắn nhất, độ dài đường tăng ngắn nhất sẽ tăng ngặt.Định lý. Thuật toán đường tăng luồng ngắn nhất đòi hỏi thời gian tính O(m2n).O(m+n) thời gian để tìm đường ngắn nhất nhờ sử dụng BFS.O(m) lần tăng đối với đường đi có đúng k cung. O(mn) lần tăng.Chú ý: (mn) lần tăng là cần thiết đối với một số mạng cụ thể.Cố gắng tìm cách giảm số lần tăng.Cây động  O(mn log n) Sleator-Tarjan, 1983Ý tưởng khác  O(mn2) Dinitz, 197081Tổng kết: Lựa chọn đường tăng4 qui tắc đầu đòi hỏi khả năng thông qua nằm trong khoảng từ 0 đến C.Phương phápSố lần tăngAugmenting pathnCMax capacitym log CCapacity scalingm log CShortest pathmnThời gian tínhmnCm log C (m + n log n)m2 log Cm2nImproved shortest path mnmn2Improved capacity scalingm log Cmn log C82Lịch sử phát triểnDantzigTác giảSimplexPhương phápBig-Ohmn2U1951NămFord, FulkersonAugmenting pathmnU1955Edmonds-KarpShortest pathm2n1970DinitzShortest pathmn21970Edmonds-Karp, DinitzCapacity scalingm2 log U1972Dinitz-GabowCapacity scalingmn log U1973KarzanovPreflow-pushn31974Sleator-TarjanDynamic treesmn log n1983Goldberg-TarjanFIFO preflow-pushmn log (n2 / m)1986. . .. . .. . .. . .Goldberg-RaoLength functionm3/2 log (n2 / m) log U mn2/3 log (n2 / m) log U1997QUESTIONS?83

Các file đính kèm theo tài liệu này:

  • pptbai_giang_ly_thuyet_do_thi_chuong_6_bai_toan_luong_cuc_dai.ppt