Thiết kế và phân tích hệ thống, Luồng cực đại
Trang 1TIỂU LUẬN
Đề tài:
LUỒNG CỰC ĐẠI
Giáo viên hướng dẫn : TS Hoàng Quang
Học viên thực hiện: Nguyễn Văn Sửu (Nhóm trưởng)
Nguyễn Đề Nguyễn Thị Thu Nguyễn Đức Nghĩa Nguyễn Đức Quê
Lớp : Khoa học máy tính B 2010-2012
Huế, 2011
Trang 2Mục lục
Hu , 2011 ế 1
M c l c ụ ụ 1
Phân công th c hi n ti u lu n: ự ệ ể ậ 1
1.Nguy n Văn S u: ph n 26.1 ễ ử ầ 1
2.Nguy n Đ : ph n 26.2 ễ ề ầ 2
3.Nguy n Đ c Nghĩa: ph n 26.3 ễ ứ ầ 2
4.Nguy n Đ c Quê: ph n 26.4 ễ ứ ầ 2
5.Nguy n Th Thu: ph n 26.5 ễ ị ầ 2
26 Lu ng C c Đ i ồ ự ạ 3
26.1 Các m ng lu ng ạ ồ 4
26.2 Ph ng pháp Ford - Fulkerson ươ 12
26.3 So kh p hai nhánh c c đ i ớ ự ạ 32
26.4 Các thu t toán đ y lu ng tr c ậ ầ ồ ướ 37
27.5 Thu t toán nâng t i tr c ậ ớ ướ 50
Phân công thực hiện tiểu luận:
1 Nguyễn Văn Sửu: phần 26.1
Trang 32 Nguyễn Đề: phần 26.2
3 Nguyễn Đức Nghĩa: phần 26.3
4 Nguyễn Đức Quê: phần 26.4
5 Nguyễn Thị Thu: phần 26.5
Trang 4di chuyển" (flow) của vật chất tại một điểm bất kỳ trong hệ thống theo trực giác là tốc độ
và vật chất di chuyển Có thể dùng các mạng luồng để lập mô hình các chất lỏng chảy qua các ống dẫn, các linh kiện qua các dây chuyền lắp ráp, dòng điện qua các mạng lưới điện, thông tin qua các mạng truyền thông, và …
Mỗi cạnh có hướng trong một hạng luồng có thể được xem như một ống dẫn cho vật chất Mỗi ống dẫn có một dung lượng đã định, được nêu dưới dạng tốc độ cực đại qua đó vật chất có thể lưu chuyển qua ống dẫn, như 200 gallon chất lỏng mỗi giờ qua một ống dẫn hoặc 20 ampere dòng điện qua một dây dẫn Các đỉnh là các khớp nối của ống dẫn, và khác với nguồn và bồn, vật chất chảy qua các đỉnh mà không ứ đọng lại trong chúng Nói cách khác, tốc độ mà vật chất này là "sự bảo toàn luồng lưu", và nó giống như Luật Dòng Điện [Current Law] của Kirchhoff khi vật chất là dòng điện
Bài toán luồng cực đại là bài toán đơn giản nhất liên quan đến các mạng luồng Nó đặt vấn đề, Đâu là tốc độ lớn nhất mà vật có thể chuyển đi từ nguồn đến bồn mà không vi phạm bất kỳ hạn chế dung lượng nào? Như sẽ thấy trong chương này, bài toán này có thể được giải quyết bằng các thuật toán hiệu quat Hơn nữa, ta có thể thích ứng các kỹ thuật căn bản mà các thuật toán này sử dụng để giải quyết các bài toán luồng mạng khác
Chương này trình bày hai phương pháp chung để giải quyết bài toán luồng cực đại Đoạn 26, trình bày các khái niệm về các mạng luồng và các luồng lưu chuyển, chính thức định nghĩa bài toán luồng cực đại Đoạn 26.2 mô tả phương pháp cổ điển của Ford và Fulkerson để tìm các luồng cực đại Đoạn 26.3 mô tả một ứng dụng của phương pháp này: tìm một so khớp cực đại trong một đồ thị hai nhánh không hướng Đoạn 26.4 trình bày
Trang 5để giải quyết các bài toán luồng mạng Đoạn 26.5 đề cập thuật toán "nâng tới trước" [lift -
to - front], một thực thi cụ thể của phương pháp đẩy luồng trước chạy trong thời gian
) Tuy thật toán này không phải là thuật toán nhanh nhất được biết, song nó minh họa vài kỹ thuật được dùng trong các thuật toán nhanh nhất theo tiệm cận, và nó tương đối hiệu quả trong thực tế
26.1 Các mạng luồng
Trong đoạn này, ta nêu một định nghĩa về các mạng luồng theo lý thuyết đồ thị, đề cập các tính chất chúng, và định nghĩa bài toán luồng cực đại một cách chính xác Ta cũng giới thiệu một hệ ký hiệu hữu ích
Các mạng luồng và các luồng
Một mạng luồng [flow network] G = (V, E) là một đồ thị có hướng ở đó mỗi cạnh
= 0 Ta phân biệt hai đỉnh trong một mạng luồng: một nguồn [source] s và một bồn
[sink] t Để tiện dụng, ta mặc nhận rằng mọi đỉnh nằm trên một lộ trình nào đó từ nguồn
đến bồn Nghĩa là, với mọi đỉnh v ∉ V, ta có một lộ trình s ~> v~ > t Do đó, đồ thị được
liên thông, và |E| ≥ |V| - 1 Hình 26.1 có nêu một ví dụ của một mạng luồng.
Giờ đây, ta đã sẵn sàng để định nghĩa các luồng chính thức hơn Cho G = (V,E) là một mạng luồng (với một hàm dung lượng mặc định c) Cho s là nguồn của mạng, và cho
t là bồn Một luồng trong G là một hàm có giá trị thực f: V x V → R thỏa ba tính chất
dưới đây:
Ràng buộc dung lượng: Với tất cả u,v ∈V, ta yêu cầu f (u ,v) ≤ c (u, v).
Tính đối xứng ghềnh: Với tất cả u,v ∈ V, ta yêu cầu f (u ,v) = -f (u, v).
Bảo toàn luồng lưu: Với tất cả u ∈V - [s,t], ta yêu cầu:
f( , ) 0
Khối lượng f (u,v), có thể là dương hoặc âm, được gọi là luồng mạng [net flow] từ đỉnh
u đến đỉnh v Giá trị của một luồng f được định nghĩa là:
|f| = ∑
∈V
v
v s
Trang 6Nghĩa là, tổng luồng rời nguồn (Ở đây, hệ ký hiệu |.| thể hiện giá trị luồng, chứ
không phải là giá trị tuyệt đối hoặc bản số.) Trong bài toán luồng cực đại, ta có một mạng
luồng G với nguồn s và bồn t, và ta muốn tìm một luồng của giá trị cực đại từ s đến t, và ta muốn tìm một luồng của giá trị cực đại từ s đến t.
Hình 26.1 (a) Một mạng luồng G = (V,E) cho bài toán vận chuyển của công ty
Lucky Puck Nhà máy Vancouver là nguồn s, và nhà khoa Winnipeg là bồn t Các quả khúc côn cầu được chuyển đi qua các thành phố trung gian, nhưng chỉ c (u,v) thùng hàng mỗi ngày có thể đi từ thành phố u đến thành phố v Mỗi cạnh được gán nhãn with của nó dung
lượng (b) A flow f trong G with giá trị Nếu /f/ = 19 Chỉ các mạng luồng được nêu Nếu f
(u,v) > 0, cạnh (u,v) > 0, cạnh (u,v) được gắn nhãn bẵng f (u,v)/c (u,v) (Hệ ký hiệu dấu sổ
(/) được dùng để đơn thuần tách biệt luồng với dung lượng; nó không biểu hiện phép chia.)
Nếu f (u,v) ≤, cạnh (u,v) chỉ được gắn nhãn bằng dung lượng của nó.
Trước khi xem một ví dụ về bài toán luồng mạng, ta hãy khảo sát ngắn gọn ba tính chất luồng Sự ràng buộc dung lượng đơn giản muốn nói luồng mạng từ đỉnh này đến đỉnh khác không được vượt quá dung lượng đã cho Tính đối xứng ghềnh nói rằng luồng mạng
từ một đỉnh u đến một đỉnh v là âm của luồng mạng theo hướng nghịch đảo Như vậy,
luồng mạng từ một đỉnh đến chính nó sẽ là 0 Tính chất bảo toàn luồng lưu nói rằng tổng luồng mạng rời một đỉnh khác với nguồn hoặc bồn sẽ là 0 Theo tính đối xứng ghềnh, ta có thể viết lại tính chất bảo toàn luồng lưu là
f( , ) 0
với tất cả v ∈V - [s,t] Nghĩa là, tổng luồng mạng vào một đỉnh là 0.
Cũng quan sát thấy có thể không có luồng mạng nào giữa u và v nếu không có cạnh
Trang 7mạng phi zero từ xứng ghềnh, ta có f (u,v) = f (v,u) = 0 Như vậy, luồng mạng phí zero từ đỉnh đến u đến đỉnh v hàm ý rằng (u,v) ∈ E hoặc (v,u)∈E (hoặc cả hai).
Nhận xét cuối cùng của chúng ta về các tính chất luồng có liên quan đến luồng mạng
dương Luồng mạng dương nhập một đỉnh v được định nghĩa bởi.
v
V
u
v u
f
(26.2)Luồng mạng dương rời một đỉnh được định nghĩa một cách đối xứng Một diễn dịch
về tính chất bảo toàn luồng lưu đó là luồng mạng dương nhập một đỉnh khác với nguồn hoặc bồn phải bằng với luồng mạng dương rời đỉnh
Một ví dụ về luồng mạng
Một mạng luồng [flow network] có thể lập mô hình bài toán vận chuyển nêu trong
Hình 26.1 Công ty Lucky Puck có một nhà myas (nguồn s) ở Vancouver chế tạo các quả bóng khúc côn cầu, và có một nhà kho (bồn t) ở Winnipeg lưu trữ chúng Lucky Puck thuê
không gian trên các xe tải một hãng khác để vận chuyển các quả bóng khúc côn cầu từ nhà máy đến nhà kho Do các xe tải di chuyển trên các tuyến đường đã định giữa các thành phố
và có một dung lượng hạn chế, Lucky Puck có thể vận chuyển tối đa c(u,v) thùng hàng mỗi ngày giữa mỗi cặp thành phố u và y trong Hình 26.1 (a) Mục tiêu của họ đó là xác định khối lượng lớn nhất p thùng hàng mỗi ngày có thể chuyển đi để rồi tạo ra khối lượng này,
bởi không cần gì phải chế tạo số lượng quả bóng khúc côn cầu nhiều hơn mức có thể chuyển chúng đến nhà kho
Tốc độ mà các quả bóng khúc côn cầu được chuyển đi dọc theo một tuyến đường vận chuyển bất kỳ được xem là một luồng Các quả bóng khúc côn cầu xuất phát từ nhà máy
với tốc độ p thùng hàng mỗi ngày, và p thùng hàng phải đến nhà kho mỗi ngày Lucky
Puck không quan tâm đến thời gian mà một quả bóng đã cho di chuyển từ nhà máy đến nhà
kho; học chỉ quan tâm rằng p thùng hàng mỗi ngày đến nhà kho Các hạn chế dung lượng
bị khống chế bởi mức hạn chế mà luồng f (u,v) từ thành phố u đến thành phố v tối đa là
c(u,v) thùng hàng mỗi ngày Trong một trạng thái ổn định, tốc độ mà các quả bóng khúc
côn cầu nhập một thành phố trung gian trong mạng vận chuyển phải bằng tốc độ mà chúng rời đi; bằng không, chúng sẽ ùn đống Do đó, sự bảo toàn luồng được tuân thủ Như vậy,
một luồng cực đại trong mạng xác định số lượng cực đại p thùng hàng mỗi ngày có thể
Trang 8Hình 26.1 (b) nêu một luồng khả dĩ trong mạng được biểu thị cho một cách tương
ứng tự nhiên với các chuyến hàng Với bất kỳ hai đỉnh u và v trong mạng, luồng mạng
f(u,v) tương ứng với một chuyến hàng gồm f (u,v) thùng hàng mỗi ngày từ u đến v Nếu f (u,v) là 0 hoặc âm, thì không có chuyến hàng nào từ u đến v Như vậy, trong Hình 26.1 (b),
chỉ có các cạnh có luồng mạn dương mới được nêu, theo sau là một dấu sổ ngả trước và dung lượng của cạnh
Để hiểu rõ mối quan hệ giữa các luồng mạng và các chuyến hàng, ta tập trung vào
v 1 và v 2 , kết quả được nêu trong Hình 26.2 (b): luồng mạng từ v 1 đến v 2 là 8 thùng hàng mỗi
đến v 1 Nói chung, luồng mạng từ v 1 đến v 2 trừ số lượng mỗi ngày được chuyển đi từ v 2 đến
bởi chúng nêu rõ các chuyến hàng thực tế: như vậy, chỉ một 8 xuất hiện trong hình, mà không có -8 tương ứng
Hình 26.2 Sự khử (a) Các đỉnh v 1 và v 2 và v 2 , với c (v 1 - v 2 )) = 10 và c (v 2 - v 1 ) = 4
(b) Các nêu rõ luồng mạng khi 8 thùng hàng mỗi ngày được chuyển đi từ v 1 đến v 2 (c) Một
khử luồng đi theo các hướng ngược lại, ta có thể biểu diễn tình huống trong (c) bằng luồng mạng dương theo chỉ một hướng (e) Một chuyến 7 thùng hàng mỗi ngày khác được
chuyển đi từ v 2 đến v 1
Trang 9huống ở đó có các chuyến hàng theo cả hai giữa v 1 và v 2 Ta chuyển 8 thùng hàng mỗi ngày
từ v 1 đến v 2 và 3 thùng hàng mỗi ngày từ v 2 đến v 1 Đâu là các luồng mạng giữa hai đỉnh?
Luồng mạng từ v 1 đến v 2 là 8 - 3 = 5 thùng hàng mỗi ngày, và luồng mạng từ v 2 các v 1 là 3 -
8 = -5 các thùng hàng mỗi ngày
Tình huống tương đương trong kết quả của nó với tình huống nêu trong Hình 26.2
được thực hiện từ v 2 đến v 1 Trên thực tế, 3 thùng hàng mỗi ngày từ v 2 đến v 1 được khử bởi
3 trong số 8 thùng hàng mỗi ngày từ v 1 đến v 2 Trong cả hai tình huống, luồng mạng từ v 1
chỉ một hướng
Nói chung, phép cho phép ta biểu diễn các chuyến hàng giữa hai thành phố bằng một luồng lạng dương dọc theo tối đa một trong hai cạnh giữa các đỉnh tương ứng Nếu có luồng mạng zero hoặc âm từ đỉnh này đến đỉnh khác, ta không cần thực hiện chuyến hàng nào theo hướng đó Nghĩa là, bất kỳ tình huống nào ở đó các quả bóng khúc côn cầu được chuyển đi theo cả hai hướng giữa hai thành phố đều có thể dùng phép hủy để biến đổi thành một tình huống tương đương ở đó các quả bóng khúc côn cầu được chuyển đi theo chỉ một hướng: hướng của luồng mạng dương Các hạn chế dung lượng không bị vi phạm bởi phép biến đổi này, bởi ra rút gọn các chuyến hàng trong cả hai hướng, và các hạn chế bảo toàn không bị vi phạm, bởi luồng mạng giữa hai đỉnh là giống nhau
Tiếp tục với ví dụ của chúng ta, hãy xác định hiệu ứng của việc chuyển một chuyến 7
thùng hàng mỗi ngày khác từ v 2 đến v 1 Hình 26.2 (e) nêu kết quả dùng quy ước chỉ biểu thị
đến v 1 trở thành 7 - 5 = 2 Bởi luồng mạng từ v 2 đến v 1 là dương, nó biểu diễn một chuyến 2
thùng hàng mỗi ngày từ v 2 đến v 1 Luồng mạng từ v 1 đến v 2 là - 2 thùng hàng mỗi ngày, và bởi luồng mạng không dương, nên không có các quả bóng khúc côn cầu được chuyển đi
chuyến hàng thực tế mỗi ngày từ v 2 đến v 1
Trang 10Hình 26.3 Chuyển đổi một bài toán luồng cực đại đa nguồn, đa bồn thành một bài
s 2 ,s 3 ,s 4 ,s 5 ] và ba bồn T = [t 1 ,t 2 ,t 3] (b) Một mạng luồng nguồn đơn, bồn đơn tương đương
Ta bổ sung một siêu nguồn [supersource] s' và một cạnh có dung lượng vô hạn từ s' đến mỗi trong số nhiều nguồn Ta cũng bổ sung một siêu bồn [supersink] t' và một cạnh có dung lượng vô hạn từ mỗi trong số nhiều bồn đến t'.
Các mạng có nhiều nguồn và bồn
Một bài toán luồng cực đại có thể có nhiều nguồn và bồn, thay vì chỉ có một Ví dụ,
công ty Lucky Puck có thể thực tế có một tập hợp m nhà máy [s 1 ,s 2 , s m ] và một tập hợp n nhà kho [t 1 ,t 2 ,t n], như đã nêu trong hình 26.3 (b) nêu cách chuyển đổi mạng từ (a) thành mạng luồng cực đại bình thường
Ta có thể rút gọn bài toán xác định một luồng cực đại trong một mạng có nhiều nguồn và nhiều bồn thành bài toán luồng cực đại bình thường Hình 26.3 (b) nêu cách chuyển đổi mạng từ (a) thành mạng luồng bình thường với chỉ một nguồn đơn và một bồn
c(s,s i ) = ∞ cho mỗi i = 1,2, ,m Ta cũng tạo một siêu bồn mới t và bổ sung một cạnh có
hướng (t j ,t) ∞ cho mỗi i = 1, 2, n Theo trực giác, bất kỳ luồng nào trong mạng của (a) tương ứng với một luồng trong mạng của (b), và ngược lại Nguồn đơn s đơn giản cung
Trang 11luồng theo như mong muốn của nhiều bồn t cũng vậy, nó tiêu thụ luồng theo như mong
toàn là tương đương
Làm việc với các luồng
Ta sẽ đề cập đến vài hàm (như f) tiếp nhận hai đỉnh trong một mạng luồng làm đối số
Trong chương này, ta sẽ dùng một hệ ký hiệu phép lấy tổng ẩn ở đó một trong hai, hoặc cả
hai, đối số có thể là một tập hợp các đỉnh, và giá trị được biểu hiện được hiểu là tổng của tất cả cách thay thế các đối số khả dĩ bằng các phần tử của chúng Ví dụ, nếu X và Y là
f( , )
Để lấy một ví dụ khác, ta có thể diễn sự ràng buộc bảo toàn luồng như là điều kiện f (u,V) = 0 với tất cả u ∈V - [s,t] Ngoài ra, để tiện dụng, ta thường bỏ qua các dấu ngoặc ôm tập hợp khi chúng được dùng trong hệ ký hiệu phép lấy tổng ẩn Ví dụ, trong chương trình
f (s, V - s) = f (s,V), số hạng V - s có nghĩa là tập hợp V - [s].
Ký hiệu tập hợp ẩn thường đơn giản hóa các phương trình có liên quan đến các luồng Bổ đề dưới đây, mà phần chứng minh của nó được để lại làm Bài tập 26.1-4, sẽ chốt giữ vài đồng nhất thức thường gặp nhất có liên quan đến các luồng và ký hiệu tập hợp ẩn
Trang 12Theo trực giác điều này là đúng, bởi tất cả các đỉnh khác với nguồn và bồn đều có một luồng mạng 0 do sự bảo toàn luồng lưu, và như vậy bồn là đỉnh duy nhất khác có thể
có một luồng mạng phi zero để so khớp luồng mạng phi zero của nguồn Phần chứng minh hình thức của chúng ta sẽ như sau:
Ở phần sau trong chương trình này, ta sẽ tổng quát hóa kết quả này (Bổ đề 26.5)
Bài tập
26.1-1
Cho các đỉnh u và v trong một mạng luồng, ở đó c (u,v) = 5 và c (v,u) = 8, giả sử 3 đơn vị của luồng được chuyển đi từ u đến v và 4 đơn vị được chuyển đi từ v đến u Đâu là luồng mạng từ u đến v? Vẽ tình huống theo kiểu dáng của Hình 26.2.
26.1-4
Chứng minh Bổ đề 26.1
26.1-5
Với mạng luồng G = (V,E) và luồng f nêu trong Hình 27.1 (b), hãy tìm một cặp tập
(X,Y) ≠ - f (V - X,Y).
26.1-6
Trang 13Căn cứ vào một mạng luồng G = (V,E), cho f 1 và f 2 là các hàm từ V x V đến R tổng
luồng f 1 + f 2 là hàm từ V x X đến R được định nghĩa bởi.
với tất cả u,v∈V Nếu f 1 và f 2 là các luồng trong G, tổng luồng f 1 + f 2 phải thỏa tính chất nào trong số ba tính chất luồng, và có thể vi phạm tính chất nào?
26.1-7
α f là một hàm từ V x V đến R được định nghĩa bởi
(α f) (u,v) = α (u,v).
Chứng minh các luồng trong một mạng hình thành một tập hợp lồi bằng cách chứng
tỏ nếu f 1 và f 2 là các luồng, thì như vậy là một f 1 + (1-α) f 2 với tất cả α trong miền giá trị 0
≤ α ≤ 1.
26.1-8
Phát biểu bài toán luồng cực đại dưới dạng một bài toán lập trình tuyến tính
26.1-9
Mô hình mạng luồng đã giới thiệu trong đoạn này hỗ trợ luồng của một mặt hàng;
một mạng luồng nhiều mặt hàng hỗ trợ luồng p mặt hàng giữa một tập hợp p đỉnh nguồn
S = [s 1 ,s 2 , ,s p ] và một tập hợp p đỉnh bồn T = [t 1 ,t 2 , ,t p] Luồng mạng của mặt hàng thứ i
từ u đến v được ký hiệu là f i (u,v) Với mặt hàng thứ i, nguồn duy nhất là s i và bồn duy nhất
rời mỗi đỉnh là zero trừ phi đỉnh là nguồn hoặc bồn cho mặt hàng đó Tổng các luồng mạng
của tất cả các mặt hàng từ u đến v không được vượt quá c (u,v), và các luồng mặt hàng
tương tác theo cách này Giá trị của luồng mỗi mặt hàng là luồng mạng rời nguồn cho mặt
hàng đó Tổng giá trị luồng là tổng các giá trị của tất cả p luồng mặt hàng Chứng minh có
một thuật toán thời gian đa thức giải quyết bài toàn tìm tổng giá trị luồng cực đại của một mạng luồng đa mặt hàng bằng cách trình bày toán dưới dạng một chương trình tuyến tính
26.2 Phương pháp Ford - Fulkerson
Phần này sẽ trình bày phương pháp Ford - Fulkerson để giải quyết bài toán luồng cực đại Ta gọi nó là “phương pháp” thay vì một “thuật toán” bởi nó bao hàm vài thực thi
Trang 14có các thời gian thực hiện khác nhau Phương pháp Ford-Fulkerson tuỳ thuộc vào ba ý tưởng quan trọng vượt trên phương pháp và có nhiều liên quan đến thuật toán và bài toán luồng: các mạng thặng dư, các lộ trình tăng cường và các phần cắt Các ý tưởng này là thiết yếu đối với định lý max-flow min-cut quan trọng (Định lý 26.7), định rõ đặc điểm đối với giá trị của một luồng cực đại theo dạng các phần cắt của mạng luồng Để kết thúc đoạn này, ta trình bày một kiểu thực thi cụ thể của phương pháp Ford-Fulkerson và phân tích thời gian thực hiện của nó.
cho ra một luồng ban đầu có giá trị 0 Vào mỗi lần lặp lại, ta tăng giá trị luồng bằng cách
tìm một “lộ trình tăng cường” mà ta có thể đơn giản xem nó như một lộ trình từ nguồn s đến bồn t dọc theo đó ta có thể đẩy thêm luồng, rồi tăng cường luồng dọc theo lộ trình này
Ta lặp lại tiến trình này cho đến khi không tìm thấy lộ trình tăng cường nào Định lý flow min-cut sẽ chứng tỏ khi kết thúc, tiến trình này cho ra một luồng cực đại
max-FORD-FULKERSON-METHOD(G,s,t)
1 Khởi tạo luồng ƒ theo 0
2 while ở đó tồn tại một lộ trình tăng cường p
3 do tăng cường luồng ƒ dọc theo p
4 return ƒ
Các mạng thặng dư
Theo trực giác, cho một mạng luồng và một luồng, mạng thặng dư bao gồm các
cạnh có thể tiếp nhận thêm luồng mạng Chính thức hơn, giả sử ta có một mạng luồng G =
Khối lượng của một luồng mạng bổ sung mà ta có thể đẩy từ u đến v trước khi vượt quá
dung lượng c(u, v) là dung lượng thặng dư của (u, v), căn cứ vào
Trang 15Ví dụ nếu c(u, v) = 16 và ƒ(u, v) = 11, thì ta có thể chuyển đi thêm (u, v) = 5 đơn
vị của luồng trước khi vượt quá sự ràng buộc dung lượng trên cạnh (u, v).
Khi luồng mạng ƒ(u, v) là âm, dung lượng thặng dư (u, v) sẽ lớn hơn dung lượng
c(u, v) Ví dụ, nếu c(u, v) = 16 và ƒ(u, v) = -4, thì dung lượng thặng dư (u, v) là 20 Ta có
thể diễn dịch điều này như sau: Ta có một luồng mạng 4 đơn vị từ v đến u, mà ta có thể khử bằng cách đẩy một luồng mạng 4 đơn vị từ u đến v Sau đó, ta có thể đẩy một lượng
16 đơn vị khác từ u đến v trước khi vi phạm sự ràng buộc dung lượng trên cạnh (u, v) Như vậy, ta đẩy một lượng bổ sung 20 đơn vị của luồng, bắt đầu bằng một luồng mạng ƒ(u, v) =
-4, trước khi đụng sự ràng buộc dung lượng
Cho một mạng luồng G = (V, E) và một luồng ƒ, mạng thặng dư của G được cảm
sinh bởi ƒ là = (V, ), ở đó
= {(u, v) V V : (u, v) > 0}.
Nghĩa là, mỗi cạnh của mạng thặng dư, hoặc cạnh thặng dư, có thể tiếp nhận một
luồng mạng hoàn toàn dương Hình 26.4(a) lặp lại luồng mạng G và luồng ƒ của hình
26.1(b) nếu mạng thặng dư tương ứng
Trang 16Hình 26.4 (a) Mạng luồng G và luồng ƒ của Hình 26.4(b)
(b) Mạng thặng dư với lộ trình tăng cường p được tô bóng; dung lượng
(c) Luồng trong G là kết quả từ sự tăng cường dọc theo lộ trình p bởi dung
lượng thặng dư 4 của nó
(d) Mạng thặng dư được sinh cảm bởi luồng trong (c)
Lưu ý, (u, v) có thể là một cạnh thặng dư trong cho dù nó không phải là một cạnh trong E Nói cách khác, rất có thể là trường hợp E Mạng thặng dư trong Hình 26.4(b) bao gồm vài cạnh như vậy không nằm trong mạng luồng ban đầu, như ( , s) và ( , )
Trang 17v đến u Bởi luồng mạng ƒ(u, v) từ u đến v là âm, nên (u, v) = c(u, v) − ƒ(u, v) là dương
một trong số (u, v) và (v, u) xuất hiện trong mạng ban đầu, ta có cận
≤ 2
Nhận thấy mạng thặng dư chính là một mạng luồng có các dung lượng căn cứ
vào Bổ đề dưới đây nêu rõ một luồng trong một mạng thặng dư có liên quan với một luồng trong mạng luồng ban đầu như thế nào
Bổ đề 26.2
Cho G = (V, E) là một mạng luồng với nguồn s và bồn t, và choƒ là một luồng trong
G Cho là mạng thặng dư của G được cảm sinh bởi ƒ và cho ƒ là một luồng trong
Như vậy, tổng luồng ƒ + ƒ được định nghĩa bởi phương trình (26.4) chính là một luồng
(ƒ + ƒ’) (u, v) = ƒ(u, v) + ƒ’(u, v)
Trang 18Cho một mạng luồng G = (V, E) và một luồng ƒ, một lộ trình tăng cường p là một
lộ trình đơn giản từ s đến t trong mạng thặng dư Theo định nghĩa về mạng thặng dư, mỗi cạnh (u, v) trên một lộ trình tăng cường tiếp nhận vài luồng mạng dương bổ sung từ u đến v mà không vi phạm sự ràng buộc dung lượng trên cạnh.
Lộ trình tô bóng trong Hình 26.4(b) là một lộ trình tăng cường Nếu xem mạng
mạng bổ sung qua mỗi cạnh của lộ trình này mà không vi phạm sự ràng buộc dung lượng, bởi dung lượng thặng dư nhỏ nhất trên lộ trình này là ( , ) = 4 Ta gọi lượng luồng
Trang 19mạng cực đại mà ta có thể di chuyển đi dọc theo các cạnh của một lộ trình tăng cường p là
dung lượng thặng dư của p, căn cứ vào
(p) = min{ (u, v) : (u, v) nằm trên p}
Bổ đề dưới đây cho phép đối số trên đây chính xác hơn
Bổ đề 26.3
Cho G =(V, E) là một mạng luồng, cho là một luồng trong và cho p là một lộ
trình tăng cường trong Định nghĩa một hàm : V � V → R với
(27.6)
Hệ luận dưới đây chứng tỏ nếu bổ sung vào ƒ, ta có một luồng khác trong G mà
giá trị của nó sát với cực đại hơn Hình 27.4(c) nêu kết quả của việc bổ sung trong Hình 27.4(b) vào ƒ của Hình 27.4(a)
Hệ luận 26.4
Cho G =(V, E) là một mạng luồng, cho ƒ là một luồng trong G, và cho p là một lộ
trình tăng cường trong Cho được định nghĩa như trong phương trình (27.6) Định
Trang 20nghĩa một hàm ƒ’: V � V → R với ƒ’ = ƒ + Như vậy, ƒ là một luồng trong G có giá trị
Một phần cắt (S, T) của mạng luồng G = (V, E) là một phân hoạch của V vào S và T
= V − S sao cho s ∈ S và t ∈ T (Định nghĩa này cũng giống như định nghĩa “phần cắt” mà
ta dùng cho các cây toả nhánh cực tiểu trong Chương 24, ngoại trừ, ở đây ta đang cắt một
là ƒ(S, T) Dung lượng của phần cắt (S, T) là c(S, T).
Hình 26.5 nêu phần cắt ({s, v 1 , v 2 }, {v 3 , v 4 , t}) trong mạng luồng của Hình 26.1(b)
Luồng mạng qua phần cắt này là
ƒ(v1, v3) + ƒ(v2, v3) + ƒ(v2, v4) = 12 + (−4) + 11 = 19,
Và dung lượng của nó là: c(v1, v3) + c(v2, v4) = 12 + 14 = 26
Trang 21Hình 26.5 Một phần cắt (S, T) trong mạng luồng của Hình 26.1(b), ở đó S =
{s, v 1 , v 2 } và T = {v 3 , v 4 , t} Các đỉnh trong S mang màu đen, và các đỉnh trong T mang
màu trắng Luồng mạng qua (S, T) là ƒ(S, T) = 19, và dung lượng là c(S, T) = 26.
Nhận thấy luồng mạng qua một phần cắt có thể gộp các luồng mạng âm giữa các đỉnh, nhưng dung lượng của một phần cắt hoàn toàn được hình thành bởi các giá trị không âm
Bổ đề dưới đây chứng tỏ giá trị của một luồng trong một mạng là luồng mạng qua bất kỳ phần cắt nào của mạng
Chứng minh Cho (S, T) là một phần cắt bất kỳ của G và cho là một luồng bất kỳ
Theo Bổ đề 26.5 và các hạn chế dung lượng
|ƒ| = ƒ(S, T)
Trang 22Nếu ƒ là một luồng trong một mạng luồng G = (V, E) với nguồn s và bồn t, thì các
điều kiện dưới đây là tương đương:
1 ƒ là mạng luồng cực đại trong G.
2 Mạng thặng dư không chứa các lộ trình tăng cường
3 |ƒ| = c(S, T) với vài phần cắt (S, T) của G.
Chúng minh (1) (2): Vì sự mâu thuẫn, ta giả sử ƒ là một luồng cực đại trong G
căn cứ vào phương trình (26.6), là một luồng trong G với giá trị hoàn toàn lớn hơn |ƒ|, mâu
thuẫn với giả thiết rằng ƒ là một luồng cực đại
(2) (3): Giả sử rằng không có lộ trình tăng cường nào, nghĩa là không
chứa lộ trình từ s đến t Định nghĩa
S = {v ∈ V: ở đó tồn tại lộ trình từ s đến v trong }
Và T = V − S Phân hoạch (S, T) là một phần cắt: ta có s ∈ S theo lẽ thường và t ∉
S bởi có không lộ trình từ s đến T trong Với mỗi cặp đỉnh u và v sao cho u∈ S và v∈ T,
Trang 23ta có ƒ(u, v) = c(u, v), mặc khác (u, v) ∈ và v nằm trong tập hợp S nên theo Bổ đề 26.5,
ta có |ƒ| = ƒ(S, T) = c(S, T).
(3) (1): Theo Hệ luận 26.6, |ƒ| ≤ c(S, T) với tất cả các phần cắt (S, T) Như vậy, điều kiện |ƒ| = c(S, T) hàm ý rằng ƒ là một luồng cực đại.
Thuật toán Ford-Fulkerson căn bản
Trong mỗi lần lặp lại của phương pháp Ford-Fulkerson, ta tìm bất kỳ lộ trình tăng cường p nào và tăng cường luồng ƒ dọc theo p theo dung lượng thặng dư (p) Kiểu thực thi dưới đây của phương pháp tính toán luồng cực đại trong mỗi đồ thị G = (V, E) bằng cách nhập luồng mạng ƒ[u, v] giữa mỗi cặp u, v của các đỉnh được nối bằng một cạnh Nếu
u và v không được nối bằng một cạnh theo một trong hai hướng, ta mặc định rằng ƒ(u, v] =
0 Mã mặc định dung lượng từ u đến v được cung cấp bởi một hàm thời gian bất biến c(u,
v), với c(u, v) = 0 nếu (u, v)∉ E (Trong một kiểu thực thi điển hình, c(u,v) có thể phát sinh
từ các trường được lưu trữ trong các đỉnh và các danh sách kề của chúng) Dung lượng
thặng dư (u, v) được tính toán theo công thức (26.5) Biểu thức (p) trong mã thực thi
chỉ là một biến tạm thời lưu trữ dung lượng thặng dư của lộ trình p.
FORD-FULKERSON-METHOD (G,s,t)
1 for mỗi cạnh (u, v)∈ E[G]
2 do ƒ [u, v] ← 0
4 While ở đó tồn tại một lộ trình p từ s đến t trong mạng thặng dư
5 do (p) ← min { (u, v) : (u, v) nằm trong p }
Trang 247 do ƒ[u, v] ← ƒ[u, v] + (p)
Thuật toán FULKERSON đơn giản mở rộng trên mã giải FULKERSON-METHOD đã cho trên đây Hình 26.6 nêu kết quả của mỗi lần lặp lại trong
FORD-một đợt chạy mẫu Các dòng 1-3 khởi tạo luồng ƒ theo 0 Vòng lặp While của các dòng
4-8 liên tục tìm một lộ trình tăng cường p trong và tăng cường luồng ƒ dọc theo p theo
dung lượng thặng dư (p) Khi không có lộ trình tăng cường nào tồn tại, luồng ƒ là một
luồng cực đại
Phân tích Ford-Fulkerson
Thời gian thực hiện của FORD-FULKERSON tuỳ thuộc vào cách xác định lộ trình
tăng cuòng p trong dòng 4 Nếu nó được chọn tồi, thuật toán có thể không kết thúc: giá trị
của luồng sẽ gia tăng cùng với các lần tăng cường liên tục, nhưng thậm chí nó không cần hội tụ theo giá trị cực đại luồng Tuy nhiên, nếu lộ trình tăng cường được chọn bằng cách tìm một thuật toán tìm kiếm độ rộng đầu tiên (Đoạn 23.2), thuật toán chạy trong thời gian
đa thức Tuy nhiên, trước khi chứng minh điều này, ta được một cận đơn giản cho trường hợp ở đó lộ trình tăng cường được chọn một cách tuỳ ý và tất cả các dung lượng là số nguyên
Đa phần trong thực tế, bài toán luồng cực đại nảy sinh với các dung lượng tích phân Nếu các dung lượng này là số hữu tỷ, ta có thể dùng một phép biến đổi định tỷ lệ thích hợp để chuyển tất cả thành tích phân Dưới giả thuyết này, một thực thi đơn giản của
FORD-FULKERSON sẽ chạy trong thời gian O(S|ƒ*|), ở đó ƒ* là luồng cực đại mà thuật
toán tìm thấy Phân tích sẽ như sau: Các dòng 1-3 chiếm thời gian Θ(E) Vòng lặp while
của các dòng 4-8 được thi hành tối đa |ƒ*| lần, bởi giá trị luồng gia tăng ít nhất theo một
Trang 25Hình 26.6 thực thi thuật toán Ford-Fulkerson (a) - (d) Các lần lặp lại liên tục của
vòng lặp while Cạnh trái của từng phần sẽ nêu mạng thặng dư từ dòng 4 bằng một lộ
Trang 26trình tăng cường p được tô bóng Cạnh phải của từng phần sẽ nêu luồng mới ƒ kết quả của
việc bổ sung vào ƒ Mạng thặng dư trong (a) là nhập liệu mạng G (e) Mạng thặng dư
tại lần trắc nghiệm vòng lặp while Nó không có các lộ trình tăng cường, và do đó luồng ƒ
nêu trong (d) là một luồng cực đại
Hình 26.7 (a) Một mạng luồng mà FORD-FULKERSON có thể mất Θ(E|ƒ*|) thời
gian, ở đó ƒ* là một luồng cực đại, được nêu ở đây bằng |ƒ*| = 2,000,000 Một lộ trình tăng cường với dung lượng thặng dư 1 được nêu (b) Mạng thặng dư kết quả Một lộ trình tăng cường khác với dung lượng thặng dư 1 đuợc nêu (c) Mạng thặng dư kết quả
Công việc thực hiện trong vòng lặp while có thể sẽ hiệu quả nếu ta quản lý một
cách hiệu quả cấu trúc dữ liệu được dùng thực thi mạng G = (V, E) Hãy mặc định rằng ta duy trì một cấu trúc dữ liệu tương ứng với một đồ thị có hướng G’ = (V, E’), ở đó E’ = {(u,
v) : (u, v)∈ E hoặc (v, u)∈ E} Các cạnh trong mạng G cũng là các cạnh trong G’ và do đó
ta cần duy trì các dung lượng và các luồng trong cấu trúc dữ liệu này Cho một luồng ƒ trên
G, các cạnh trong mạng thặng dư bao gồm tất cả các cạnh (u, v) của G’ sao cho c(u, v) -
[u, v] ≠ 0 Do đó, thời gian để tìm một lộ trình trong một mạng thặng dư là O(E’) = O(E)
nếu ta dùng thuật toán tìm kiếm độ sâu đầu tiên hoặc tìm kiếm độ rộng đầu tiên Như vậy,
mỗi lần lặp lại của vòng lặp while sẽ mất O(E) thời gian, khiến tổng thời gian thực hiện
Trang 27Khi các dung lượng là tích phân và giá trị luồng tối ưu |ƒ*| nhỏ, thời gian thực hiện của thuật toán Ford-Fulkerson tỏ ra thích hợp Hình 26.7(a) có nêu một ví dụ về nội dung
có thể xảy ra trên một mạng luồng đơn giản mà |ƒ*| là lớn Một luồng cực đại mạng này có
giá trị 2,000,000: 1,000,000 đơn vị của luồng băng ngang lộ trình s → u → t, và một 1,000,000 đơn vị khác băng ngang lộ trình s → v → t Nếu lộ trình tăng cường đầu tiên mà FORD-FULKERSON tìm thấy là s → u → v → t, xem Hình 26.7(a), luồng có giá trị 1 sau
lần lặp lại đầu tiên Mạng thặng dư kết quả được nêu trong Hình 26.7(b) Nếu lần lặp thứ
hai tìm thấy lộ trình tăng cường s → v → u → t, như đã nêu trong hình 26.7(b), thì luồng
sẽ giá trị 2 Hình 26.7(c) nêu mạng thặng dư kết quả Ta có thể tiếp tục chọn lộ trình tăng
cường s → u → v → t trong các lần lặp lại đánh số lẻ và lộ trình tăng cường s → u → v →
t trong các lần lặp lại đánh số chẵn Ta sẽ thực hiện một tổng 2,000,000 lần tăng cường,
mỗi lần chỉ tăng giá trị luồng lên 1 đơn vị
Có thể cải thiện cận trên FORD-FULKERSON nếu ta thực thi phép tính của lộ trình
tăng cường p trong dòng 4 bằng một thuật toán tìm kiếm độ rộng đầu tiên, nghĩa là, nếu lộ trình tăng cường là một lộ trình ngắn nhất từ s đến t trong mạng thặng dư, ở đó mỗi cạnh
có một khoảng cách đơn vị (trọng số) Ta gọi phương pháp Ford-Fulkerson đó là đã thực
thi thuật toán Edmonds-Karp Giờ đây ta chứng minh thuật toán Edmonds-Karp chạy trong
O(VE2) thời gian
Phần phân tích tuỳ thuộc vào các khoảng cách đến các đỉnh trong mạng thặng dư
Bổ đề dưới đây sử dụng hệ ký hiệu (u, v) với khoảng cách lộ trình ngắn nhất từ u đến v
trong ở đó mỗi cạnh có khoảng cách đơn vị
Bổ đề 26.8
Trang 28Nếu thuật toán Edmonds-Karp chạy trên mạng luồng G = (V, E) với nguồn s và bồn
t, thì với tất cả các đỉnh v ∈ V − {s, t}, khoảng cách lộ trình ngắn nhất (s, t) trong mạng
thặng dư sẽ tăng đơn điệu với mỗi phép tăng cường luồng
Chứng minh Vì sự mâu thuẫn, ta giả sữ với một đỉnh v ∈ V − {s, t}, ta có một phép tăng cường luồng khiến (s, v) giảm Cho ƒ’ là luồng ngay trước phép tăng cường và cho
ƒ là luồng ngay sau đó Thì,
(s, v) < (s, v)
cả các đỉnh u ∈ V − {s, t} sao cho (s, u) < (s, u) Tương đương, ta có thể mặc nhận rằng với tất cả các đỉnh u ∈ V − {s, t},
(s, u) < (s, v) hàm ý (s, u) ≤ (s, u) (26.7)
v) là một cạnh trên p’, chính là một lộ trình ngắn nhất từ s đến v Do đó, theo giả thuyết
(26.7) của chúng ta,
(s, u) ≤ (s, u)
Trang 29Như vậy, với các đỉnh v và u được thiết lập, ta có thể xát luồng mạng ƒ từ u đến v trước khi phép tăng cường của luồng trong Nếu ƒ[u, v] < c(u, v), thì ta có
Như vậy, ta phải có ƒ[u, v] = c(u, v), có nghĩa là (u, v) Giờ đây, lộ trình tăng
luồng dọc theo lộ trình p đẩy luồng trở lại dọc theo (u, v) và v xuất hiện trước u trên p Bởi
Trang 30< (s, v),
mâu thuẫn với giả thuyết ban đầu của chúng ta
Định lý dưới đây định cận số lần lặp lại của thuật toán Edmonds-Karp
Định lý 26.9
Nếu thuật toán Edmonds-Karp chạy trên một mạng luồng G = (V, E) với nguồn s và bồn t, thì tổng số lần tăng cường luồng mà thuật toán thực hiện sẽ tối đa là O(VE).
Chứng minh Ta nói một cạnh (u, v) trong một mạng thặng dư là tới hạn trên một
lộ trình tăng cường p nếu dung lượng thặng dư của p là dung lượng thăng dư của (u, v), nghĩa là, nếu (p) = (u, v) Sau khi đã tăng cường luồng dọc theo một lộ trình tăng
cường, mọi cạnh tới hạn trên lộ trình đều sẽ biến mất khỏi mạng thặng dư Hơn nữa, ít nhất một cạnh trên bất kỳ lộ trình tăng cường nào đều phải tới hạn
Cho u và v là các đỉnh trong V được liên thông bởi một cạnh trong E (u, v) có thể là
một cạnh tới hạn bao nhiêu lần trong khi thi hành thuật toán Edmonds-Karp? Bởi các lộ
trình tăng cường là các lộ trình ngắn nhất, khi (u, v) tới hạn đầu tiên, nên ta có
(s, v) = (s, u) + 1
Một khi luồng được tăng cường, cạnh (u, v) biến mất khỏi mạng thặng dư Nó
không thể tái xuất hiện về sau trên một lộ trình tăng cường khác cho đến sau khi luồng
mạng từ u đến v giảm và đều này chỉ xảy ra nếu (v, u) xuất hiện trên một lộ trình tăng cường Nếu ’ là luồng trong G khi sự kiện này xảy ra, thì ta có
(s, u) = (s, v) + 1
Trang 31Bởi (s, v) ≤ (s, u) theo Bổ đề 26.8, ta có
(s, u) = (s, v) + 1
Kết quả là, từ lúc mà (u, v) trở thành tới hạn đến lúc đó nó trở thành tới hạn sau đó,
khoảng cách của u từ nguồn sẽ gia tăng ít nhất 2 Thoạt đầu khoảng cách của u từ nguồn ít nhất là 1 và cho đến khi nó trở thành bất khả dụng từ nguồn, nếu như có thì khoảng cách
của nó tối đa là |V| - 2 Như vậy, (u, v) có thể trở thành tới hạn tối đa O(V) lần Bởi có O(E)
cặp đỉnh có thể có một cạnh giữa chúng trong một đồ thị thặng dư, nên tổng các cạnh tới
hạn trong nguyên cả tiến trình thi hành thuật toán Edmonds-Karp là O(E) Mỗi lộ trình tăng
cường có ít nhất một cạnh tới hạn và do đó định lý đứng vững
Bởi mỗi lần lặp lại của FORD-FULKERSON có thể được thực thi trong O(E) Thời
gian khi thuật toán tìm kiếm độ rộng đầu tiên tìm thấy lộ trình tăng cường, nên tổng thời
) Thuật toán trong đoạn 26.4 cho ta
O(V3
) thời gian của Đoạn 26.5
Bài tập
26.2-1
Trong Hình 26.1(b), nêu luồng qua phần cắt ({s, v 2 , v 4 } , {v1, v3, t})? Đâu là dung
lượng của phần cắt này?
26.2-2
Nêu tiến trình thi hành thuật toán Edmonds-Karp trên mạng luồng của Hình 26.1(a)
26.2-3