Chương 3.7. Bài toán luồng cực đại trong mạng v2.pdf
1. CHƢƠNG 3: LÝ THUYẾT ĐỒ THỊ
GV: Đặng Hữu Nghị
Sđt: 0989640319
Email: nghidanghuu@gmail.com
2. NỘI DUNG
3.1 •Các khái niệm cơ bản của lý thuyết đồ thị
3.2 •Biểu diễn đồ thị trên máy tính
3.3 •Các thuật toán tìm kiếm trên đồ thị
3.4 •Đồ thị Euler và đồ thị Hamilton
3.5 •Cây và cây khung của đồ thị
3.6 •Bài toán đường đi ngắn nhất
3.7 •Bài toán luồng cực đại trong mạng 2
3. GIỚI THIỆU
Luồng cực đại là một trong những bài toán tối ưu
trên đồ thị tìm được những ứng dụng rất rộng rãi
trong cả thực tế cũng như 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 2 nhà toán học Mỹ: Ford
(Lester Randolph Ford: 1927 - ) và Fulkerson
(Delbert Ray Fulkerson: 1924 - 1976).
3
4. 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ụ:
Ta quy ước nếu mạng không có cung (u, v) thì ta thêm
vào cung (u, v) với khả năng thông qua c[u, v] bằng 0.
4
5. LUỒ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
( ) ( )
( ) ( )
e E v e E v
f e f e
(*)
( ) ( )
( ) ( ) ( )
e E s e E t
val f f e f e
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.)
6. 6
LUỒ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)
w
s
v
u
t
z
3/3
2/9
1/1
1/3
3/7
2/6
4/5
1/1
3/5
2/2
Ví dụ:
7. 7
Bài toán luồng cực đại
Luồ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 đại
w
s
v
u
t
z
3/3
2/9
1/1
1/3
3/7
2/6
4/5
1/1
3/5
2/2
w
s
v
u
t
z
3/3
2/9
1/1
3/3
3/7
4/6
4/5
1/1
3/5
2/2
Luồng với giá trị 8 = 2 + 3 + 3 = 1 + 3 + 4
Luồng cực đại có giá trị 10 = 4 + 3 + 3 = 3 + 3 + 4
8. VÍ DỤ
Xét đồ thị tương ứng hệ thống ống dẫn dầu.
Trong đó các ống tương ứng với các cung, điểm phát là tàu
chở dầu, điểm thu là bể chứa,
các điểm nối của ống là các nút của đồ thị.
Khả năng thông qua của các cung tương ứng là tiết diện các
ống.
Cần phải 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.
8
9. 9
Luồng trong mạng
truyền thông
Mạng
trạm giao dịch,
máy tính, vệ tinh
Đỉnh Cung
cáp nối, cáp quang,
Luồng
voice, video,
packets
mạng điện
cổng, registers,
processors
dây dẫn dòng điện
cơ khí joints rods, beams, springs heat, energy
thuỷ lợi
hồ chứa, trạm bơm,
nguồn nƣớc
đƣờng ống
dòng nƣớc,
chất lỏng
tài chính nhà băng giao dịch tiền
giao thông
sân bay, ga tàu,
giao lộ
đƣờng cao tốc, ray,
đƣờng bay
hàng hoá,
phƣơng tiện,
hành khách
hoá học sites bonds energy
11. Ta gọi lát cắt (X, X*) là một cách phân hoạch tập đỉnh V
của mạng ra thành 2 tập X và X* = VX, trong đó s X và
t X*. Khả năng thông qua của lát cắt (X, X*) là số
Lát cắt mà khả năng thông qua nhỏ nhất gọi là lát cắt
hẹp nhất.
*
)
,
(
*)
,
(
X
u
X
v
u
v
c
X
X
c
12. 12
Lá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)
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
kntq = 30
Lát cắt nhỏ nhất (hẹp nhất) là lát cắt với kntq nhỏ nhất.
13. 13
Lá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ắt
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
cap(S1,T1)= 62
14. 14
Lá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ắt
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
cap(S2,T2) = 28
15. 15
Bổ đề 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: vS, wT} và T S = {(v,w)E: vT, w S}
Luồng và lát cắt
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
( )
( ) ( ) ( ) ( )
e S T e T S e E s
f e f f e val f
e
Giá trị = 24
10
6
6
10
10
0 10
4 8 8
0
4 0
0
0
16. 16
Bổ đề 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ắt
10
6
6
10
10
0 10
4 8 8
0
4 0
0
0
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
Giá trị = 24
17. 17
Bổ đề 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ắt
10
6
6
10
10
0 10
4 8 8
0
4 0
0
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
Giá trị = 24
0
18. 18
Bổ đề 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ắt
( ) ( ) ( )
( )
( )
cap( , )
e S T e T S
e S T
e S T
val f f e f e
f e
c e
S T
s
t
S T
7
6
8
4
19. 19
Which is the net flow across the given cut?
A. 11 (20 + 25 − 8 − 11 − 9 − 6)
B. 26 (20 + 22 − 8 − 4 − 4)
C. 42 (20 + 22)
D. 45 (20 + 25)
20. 20
Luồng cực đại và lát cắt nhỏ nhất
Max Flow and Min Cut
Hệ 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’).
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
10
9
9
14
14
4 10
4 8 9
1
0 0
Giá trị luồng = 28
0
0
kntq của lát cắt = 28
21. 21
Đị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.
s
2
3
4
5
6
7
t
15
5
30
15
10
8
15
9
6 10
10
10
15
4
4
10
9
9
14
14
4 10
4 8 9
1
0 0
Flow value = 28
0
0
Cut capacity = 28
22. 22
Ý tưởng thuật toán
Thuậ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) < c(e).
Tăng luồng dọc theo đường đi P.
Lặp lại cho đến khi gặp bế tắc.
s
4
2
5
3 t
4
0 0
0 0 0
0
4
0
4
4
Luồng có giá trị = 0
10 13 10
23. 23
Ý tưởng thuật toán
Thuậ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) < c(e).
Tăng luồng dọc theo đường đi P.
Lặp lại cho đến khi gặp bế tắc.
s
4
2
5
3 t
4
0 0
0 0 0
0
4
0
4
4
Giá trị luồng = 10
10 13 10
10 10 10
X X X
24. 24
Ý tưởng thuật toán
Thuậ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) < c(e).
Tăng luồng dọc theo đường đi P.
Lặp lại cho đến khi gặp bế tắc.
Thuật toán tham lam cho luồng với giá trị 10.
s
4
2
5
3 t
10 13 10
4
0 0
10 10 10
0
4
0
4
4
25. 25
Ý tưởng thuật toán
Thuật toán tham lam không cho lời giải tối ưu.
s
4
2
5
3 t
10 13 10
4
0 0
10 10 10
0
4
0
4
4
TT tham lam:
Giá trị luồng = 10
s
4
2
5
3 t
10 13 10
4
4 4
10 6 10
4
4
4
4
4
Tối ưu:
Giá trị luồng = 14
27. ĐỒ THỊ TĂNG LUỒNG
Giả sử f là một luồng trên mạng G = (V, E). Từ mạng G
= (V, E) ta xây dựng đồ thị có trọng số trên cung Gf =
(V, Ef) với tập cung Ef và trọng số trên các cung được
xác định theo quy tắc sau:
1. Nếu e = (u, v) E với f(u, v) = 0 thì (u, v) Ef với trọng số
c(u, v).
2. Nếu e = (u, v) E với f(u, v) = c(u, v) thì (v, u) Ef với
trọng số f(u, v).
3. Nếu e = (u, v) E với 0 < f(u, v) < c(u, v) thì (u, v) Ef với
trọng số c(u, v) – f(u, v) và (v, u) Ef với trọng số f(u, v).
Các cung của Gf đồng thời cũng là cung của G được gọi
là cung thuận, các cung còn lại được gọi là cung
nghịch. Đồ thị Gf được gọi là đồ thị tăng luồng.
27
29. ĐƯỜNG TĂNG LUỒNG
Đường tăng luồng f là mọi đường đi P từ s đến t trên đồ
thị tăng luồng Gf.
Gọi d là trọng số nhỏ nhất trong các trọng số của các
cung trên đường đi P. Từ luồng f, xây dựng luồng f’ trên
mạng G như sau:
Nếu (v, w) P là cung thuận thì f’(v, w) = f(v, w) + d
Nếu (v, w) P là cung nghịch thì f’(v, w) = f(v, w) – d
Từ đó giá trị của luồng được tăng thêm 1 đại lượng d: val(f’)
= val(f) + d
Các mệnh đề dưới đây là tương đương:
1. f là luồng cực đại trong mạng.
2. Không tìm được đường tăng luồng f.
3. val(f) = c(X, X*) với một lát cắt (X, X*) nào đó. 29
30. THUẬT TOÁN FORD – FULKERSON
Bước khởi tạo:
Bắt đầu từ luồng mà trên tất cả các cung bằng 0 (ta sẽ
gọi luồng như vậy là luồng không)
lặp lại bước lặp sau đây cho đến khi thu được luồng mà
đối với nó không còn đường tăng.
Bước lặp tăng luồng (Ford – Fulkerson):
Tìm đường tăng P đối với luồng hiện có.
Tăng luồng dọc theo P.
Khi đã có luồng cực đại, có thể tìm lát cắt hẹp nhất
30
31. Thuật toán Ford-Fulkerson:
Để tìm luồng cực đại của mạng vận tải G, ta xuất phát
từ luồng tuỳ ý ϕ của G, rồi nâng luồng lên đầy, sau đó áp
dụng thuật toán Ford-Fulkerson.
Thuật toán gồm 3 bước:
Bước 1 (đánh dấu ở đỉnh của mạng):
Lối vào v0 được đánh dấu bằng 0.
Nếu đỉnh vi đã được đánh dấu thì ta dùng chỉ số +i để
đánh dấu cho mọi đỉnh y chưa được đánh dấu mà
(vi,y)∈E và cung này chưa bão hoà (ϕ(vi,y)<m(vi,y)).
Nếu đỉnh vi đã được đánh dấu thì ta dùng chỉ số −i để
đánh dấu cho mọi đỉnh z chưa được đánh dấu mà
(z,vi)∈E và luồng của cung này dương (ϕ(z,vi)>0).
31
32. Thuật toán Ford-Fulkerson:
Bước 3:
Nếu với luồng ϕ0 bằng phương pháp trên ta không thể
nâng giá trị của luồng lên nữa, nghĩa là ta không thể
đánh dấu được đỉnh vn, thì ta nói rằng quá trình nâng
luồng kết thúc và ϕ0 đã đạt giá trị cực đại, đồng thời gọi
ϕ0 là luồng kết thúc.
32
33. Thuật toán Ford-Fulkerson:
Nếu với phương pháp này ta đánh dấu được tới
lối ra vn thì trong G tồn tại giữa v0 và vn một xích
α, mọi đỉnh đều khác nhau và được đánh dấu
theo chỉ số của đỉnh liền trước nó (chỉ sai khác
nhau về dấu). Khi đó chắc chắn ta nâng được
giá trị của luồng.
33
34. Thuật toán Ford-Fulkerson:
Bước 2 (nâng giá trị của luồng): Để nâng giá trị của
luồng ϕ, ta đặt:
ϕ’(e) = ϕ(e), nếu e ∉ α
ϕ’(e) = ϕ(e) + 1, nếu e ∈ α được định hướng theo
chiều của xích α đi từ vo đến vn
ϕ’(e) = ϕ(e) − 1, nếu e ∈ α được định hướng ngược
với chiều của xích α đi từ vo đến vn
ϕ’ thoả mãn các điều kiện về luồng, nên ϕ’ là một
luồng và ta có: ϕ’n= ϕn+1.
Như vậy, ta đã nâng được luồng lên một đơn vị.
Sau đó lặp lại một vòng mới. Vì khả năng thông qua của
các cung đều hữu hạn, nên quá trình phải dừng lại sau
một số hữu hạn bước.
34
35. 35
Thuật toán Ford – Fulkerson
Augment(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) – b
RETURN f
Tăng luồng f dọc theo đường tăng P
Ford_Fulkerson(G,c,s,t);
FOR e E DO // Khởi tạo luồng 0
f(e) 0
Gf đồ thị tăng luồng f
WHILE (tìm được đường tăng luồng P) DO
f augment(f, P)
Sửa lại Gf
RETURN f
Thuật toán Ford-Fulkerson
Ví dụ
36. VÍ DỤ:
Cho mạng vận tải như hình dưới đây với khả năng thông
qua được đặt trong khuyên tròn, luồng được ghi trên các
cung. Tìm luồng cực đại của mạng này.
36
37. GIẢI:
Mạng vận tải G có đỉnh phát là v0 và đỉnh thu là
v8.
Luồng ϕ có đường đi (v0,v4), (v4,v6), (v6,v8) gồm các
cung chưa bão hoà nên nó chưa đầy. Do đó có thể nâng
luồng của các cung này lên một đơn vị, để được ϕ1
37
V8
V4 V6
V0
6+1
+0 +4
+6
2+1
11+1
38. GIẢI:
Do mỗi đường xuất phát từ v0 đến v8 đều chứa ít nhất
một cung bão hoà, nên luồng ϕ1 là luồng đầy. Song nó
chưa phải là luồng cực đại.
38
39. Áp dụng TT Ford-Fulkerson để nâng luồng ϕ1.
Xét xích α=(v0, v4, v6, v3, v7, v8). Quá trình đánh dấu từ
v0 đến v8 để có thể nâng luồng ϕ1 lên một đơn vị bằng
cách biến đổi luồng tại các cung thuộc xích α được đánh
dấu.
39
40. GIẢI:
Sau đó ta có luồng ϕ2.
Luồng ϕ2 chưa phải là cực đại nên ta tiếp tục nâng
luồng
40
42. Nâng luồng ϕ2 lên một đơn vị, sau đó ta có luồng ϕ3.
Tiếp theo ta chỉ có thể đánh dấu được đỉnh v0 nên quá trình
nâng luồng kết thúc và ta được giá trị của luồng cực đại là:
ϕ3 = 6+12+8 = 26. 42
43. Bài tập
Giải bài toán mạng vận tải sau bằng thuật toán Ford-
Fulkerson với luồng vận tải khởi đầu bằng 0.
43
44. 44
Giải bài toán mạng vận tải sau bằng thuật toán Ford-Fulkerson với
luồng vận tải khởi đầu bằng 0.