1
Chương 2
BÀI TOÁN LUỒNG CỰC ĐẠI VỚI KHẢ NĂNG THÔNG
QUA CÁC CUNG – CÁC ĐỈNH
Bài toán luồng cực đại trong mạng một trong số những bài toán tối ưu trên
đồ thị tìm được những ứng dụng rộng rãi trong thực tế cũng như những ứng dụng thú
vị trong lý thuyết tổ hợp. Bài toán được đề xuất vào đầu những năm 1950, và gắn liền
với tên tuổi của hai nhà bác học Mỹ Ford Fulkerson. Bài toán luồng cực đại
trong mạng nhiều ứng dụng trong thực tế như: Bài toán xác định cường độ dòng
lớn nhất của dòng vận tải giữa hai nút của một bản đồ giao thông, bài toán tìm luồng
dầu lớn nhất có thể bơm từ tàu chở dầu vào bể chứa của một hệ thống đường ống dẫn
dầu…Ngoài ra, ứng dụng của bài toán còn để giải các bài toán như: Bài toán đám
cưới vùng quê, bài toán vhệ thống đại diện chung, bài toán phân nm sinh hoạt,
bài toán lập lịch cho hội nghị …Trong phạm vi đtài này tôi sẽ trình bày “bài toán
luồng cực đại trong mạng với khả năng thông qua các cung các đỉnhphải nhờ
thuật toán của Ford Fulkerson để giải bài toán đặt ra nêu một số ứng dụng của
bài toán.
I. PHÁT BIỂU BÀI TOÁN
1.Bài toán
Giả xử trong đồ thị G = (V,E), ngoài khả năng thông qua của các cung c(u,v),
mỗi đỉnh v
V còn khả năng thông qua của đỉnh d(v), đòi hỏi tổng luồng
đi vào đỉnh v không còn vượt quá d(v), tức là
Vw
vdvwf )(),(
Cần phải tìm luồng cực đại giữa s t trong mạng như vậy.
Xây dựng một mạng G’ sao cho: mỗi đỉnh v của G tương ứng với hai đỉnh v+,
v- trong G’, mỗi cung (u,v) trong G ứng với cung (u,v+) trong G’, mỗi cung (v,w)
trong G ứng với cung (v-,w+) trong G’. Ngoài ra, mỗi cung (v+,v-) trong G’ khả
năng thông qua là d(v), tức là bằng khả năng thông qua của đỉnh v trong G.
2. Giải quyết bài toán
Từ mạng G = (V,E) khả năng thông qua các cung và các đỉnh. Ta sẽ giải quyết
theo hai bước sau:
10 Xác định mạng G’.
20 Tìm luồng cực đại trong mạng G’. Bắt đầu từ luồng zero với khả năng
thông qua cung.
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
2
Thí dụ 1. Hình 1a cho dụ mạng G với khả năng thông qua cung đỉnh.
Hình 1bmạng G’ tương ứng chỉ có khả năng thông qua các cung.
Hình 1
Do luồng đi vào đỉnh v+ phải đi qua cung (v+,v-) với khả năng thông qua d(v),
nên luồng cực đại trong G’ sẽ bằng luồng cực đại trong G với khả năng thông qua
của các cung và đỉnh.
Hai bước trên ta thể biểu diễn dưới dạng sơ đồ thuật toán sau:
C[v,t]
C[u,t]
C[s,v]
C[s,u]
t
-
dt
t
+
C[u,v]
v
-
dv
v
+
u
-
du
u
+
s
-
ds
s
+
(b)
C[u,v]
C[v,t] C[s,v]
C[u,t]
C[s,u]
t dt
v dv
u du
s
ds
(a)
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
3
3. Ma trận biểu diễn đ thị của bài toán luồng cực đại.
3.1 Biểu diễn mạng G với khả năng thông qua các cung - đỉnh
Giả sử mạng G = (V,E), |V| = n. Ta có thể biểu diễn bởi ma trận trọng số A cấp
n x n như sau:
Trong đó: di là khả năng thông qua đỉnh i; C[i,j] khả năng thông qua cung [i,j].
3.2 Biểu diễn mạng G’ tương ứng với mạng G
Mạng tương ứng với G = (V,E), |V | = n mạng G’ = (V’,E’), |V’| = 2 |V |,
|E’| = 2 |E | - 1. Được biểu diễn thông qua ma trận A’ cấp (2n x 2n) như sau:
di ,nếu i = j
c[i,j] ,nếu [i,j] E
0 ,nếu [i,j] E
A = ( aij ) =
A’ = ( a’ij ) =
0 nếu i = j
c[i,j] nếu [i,j] E’
Begin
Mạng G
Mạng G’
Luồng cực đại trên G’
End
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
4
Thí dụ 2. Như thí dụ trên có mạng G như sau:
Ta có ma trận biểu diễn mạng G :
Tương tự từ mạng G’:
Ta có ma trận biểu diễn mạng G’ như sau:
s[7] 1
3
2
4
5
t[6]
v[8]
u[6]
t
-
6
t
+
4
3
1
v
-
8
v
+
u
-
6
u
-
5
s
-
7
2
s
+
A =
s u v t
7 5 2 0 s
0 6 1 4 u
0 0 8 3 v
0 0 0 6 t
A’ =
s
+
s
-
u
+
u
-
v
+
v
-
t
+
t
-
0 7 0 0 0 0 0 0 s+
0 0 5 0 2 0 0 0 s-
0 0 0 6 0 0 0 0 u+
0 0 0 0 1 0 4 0 u-
0 0 0 0 0 8 0 0 v+
0 0 0 0 0 0 3 0 v-
0 0 0 0 0 0 0 6 t+
0 0 0 0 0 0 0 0 t-
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
5
Áp dụng T.T Ford-Fulkerson tìm luồng cực đại cho mạng G’ ta được mạng
cực đại và ma trận biểu diễn nó như sau:
Với Val(f*) = 6
4. Bài toán luồng cực đại trong mạng
Cho mạng G=(V,E). Hãy tìm luồng f* trong mạng với giá trị luồng val(f*)
lớn nhất . Luồng như vậy ta sẽ gọi là luồng cực đại trong mạng.
4.1. Thuật toán Ford – Fulkerson tìm luồng cực đại trong mạng
Bắt đầu từ mạng với luồng trên tất cả các cung bằng 0 ( ta sẽ gọi luồng như vậy
luồng không ), lặp lại bước lặp sau đây cho đến khi thu được luồng đối với
nó không còn luồng tăng:
Thuật toán
10 Xuất phát từ một luồng chấp nhận được f.
20 Tìm một đường đi tăng luồng P. Nếu không thì thuật toán kết thúc. Nếu
có, tiếp bước 3 dưới đây.
30 Nếu
(P) = +
thuật toán kết thúc.
Trong đó
(P) - Lượng luồng tăng thêm, hay nói khác m stăng luồng (flow
augmentation) dọc theo đường đi tăng luồng P một lượng thích hợp mà các ràng buộc
của bài toán vẫn thoả.
Sơ đồ của thuật toán Ford – Fulkerson có thể mô tả trong thủ tục sau đây:
Procedure Max_Flow;
(* Thuật toán Ford – Fulkerson *)
begin
(* Khởi tạo: Bắt đầu từ luồng với giá trị 0 *)
for u
V do
C =
s
+
s
-
u
+
u
-
v
+
v
-
t
+
t
-
0 6 0 0 0 0 0 0 s+
0 0 4 0 2 0 0 0 s-
0 0 0 4 0 0 0 0 u+
0 0 0 0 0 0 4 0 u-
0 0 0 0 0 2 0 0 v+
0 0 0 0 0 0 2 0 v-
0 0 0 0 0 0 0 6 t+
0 0 0 0 0 0 0 0 t-
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.