TRR12 Maxflow

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 40

Luồng cực đại

Thực tế
Xét một hệ thống đường ống dầu. Trong đó các ống nối từ hệ
thống cấp trung tâm đến bể chứa. Lưu lượng dầu chảy được qua
các ống là khác nhau do tiết diện ống khác nhau. Cần phải tìm
luồng dầu lớn nhất có thể bơm từ nguồn vào bể chứa.

Source: On the history of the transportation and maximum flow problems


Nội dung
 Một số khái niệm
 Bài toán
 Thuật toán Ford-Fulkerson
 Lát cắt
Một số khái niệm
 Mạng (flow network):
 G = (V, E): Đồ thị có hướng, trong đó mỗi cung (u,v) 
E được gán 1 giá trị không âm, gọi là khả năng thông
qua (băng thông) c(u, v) >= 0
 Nếu (u,v)  E, thì đặt c(u,v) = 0.
 Trong mạng chứa 2 đỉnh phân biệt: đỉnh phát s và đỉnh
thu t
Một số khái niệm
 Luồng (flow):
 Cho mạng G = (V, E) có đỉnh phát: s, đỉnh thu: t
 Luồng f trong G là một ánh xạ f : VxV → R+ thỏa mãn điều
kiện:
 ∀ u,v V: f(u, v)  c( u,v)
 ∀ v V\{s, t} : 4
5

e.in .v
f (e) = 
e.out.v
f (e)
2

4
?
Một số khái niệm
 Giá trị f(u, v) được gọi là lưu lượng thực của luồng (net
flow) từ đỉnh u đến đỉnh v
 Giá trị của luồng được xác định bởi tổng lưu lượng
thực từ đỉnh phát đến tất cả các đỉnh trong mạng:

f =  f ( s, v )
vV
 Giá trị này đúng bằng tổng lưu lượng từ tất cả các đỉnh
trong mạng đến đỉnh thu
Một số khái niệm
 Ví dụ:
Giá trị luồng = ?
12/12

15/20
11/16

s 10 1/4 4/9 7/7 t

8/13 4/4

11/14
Bài toán luồng cực đại trong mạng
 Cho trước một mạng G = (V, E). Hãy tìm luồng f* trong
mạng có giá trị luồng |f*| là lớn nhất. Luồng thỏa mãn
điều kiện này gọi là luồng cực đại (max-flow) trong
mạng G.
 Ứng dụng:
 Bài toán ghép cặp
 Bài toán hệ đại diện
 Bài toán cực tiểu chi phí
…
Thuật toán Ford-Fulkerson
Thuật toán Ford-Fulkerson
 Mạng thặng dư
 Đường tăng luồng
 Lát cắt
 Ý tưởng:
FORD-FULKERSON-METHOD(G, s, t)
Khởi tạo luồng f có giá trị bằng 0
While tồn tại đường tăng luồng p
do tăng luồng f dọc theo đường p
return f
Mạng thặng dư
Xét mạng:
7/8
8/10
1/1
s t

5/6 6/10
Mạng thặng dư
Xét mạng:
2 7/8
8/10
1/1
s t

5/6 6/10
3

Ta có thể tăng thêm 1 trên đường: s - v3 - t


2 7/8
8/10
1/1
s t

6/6 7/10
3
Mạng thặng dư
Xét mạng:
2 7/8
8/10
1/1
s t

5/6 6/10
3

Ta có thể giảm 1 trên cung: v2 - v3


2 8/8
8/10
1
s t

5/6 6/10
3
Mạng thặng dư
 Mạng thặng dư chứa các cung có thể thay đổi để tăng lưu
lượng thực trong luồng
 Xét G = (V, E) => mạng thặng dư: Gf = (V, Ef) là đồ thị
có hướng, mỗi cung (u, v) ∈ Ef có trọng số cf(u, v) ∈ R+:
 cf(u, v) = c(u, v) - f(u, v) // Lượng băng thông có thể nhận
thêm trước khi đạt đến giới hạn
 cf(v, u) = f(u, v) // Chiều ngược lại = lượng tối đa có thể
giảm bớt
 Nếu cf(e) = 0: bỏ qua cung e
Ví dụ - mạng thặng dư
 Xét mạng:
2 7/8
8/10
1/1 Cuv/fuv
s t u v
5/6 6/10
3
Ví dụ - mạng thặng dư
Xét mạng:
2 7/8
8/10
1/1 Cuv/fuv
s t u v
5/6 6/10
3

Cuv-fuv
u v
fuv
Ví dụ - mạng thặng dư
Xét mạng:
2 7/8
8/10
1/1 Cuv/fuv
s t u v
5/6 6/10
3

Mạng thặng dư:


2 7
8 Cuv-fuv
2 1 1 u v
s t
fuv
1 4
5 6
3
Đường tăng luồng
 Một đường tăng luồng (augmenting path): là một đường
đi từ s đến t trong mạng thặng dư.
 Giá trị tăng của mỗi đường tăng luồng là trọng số nhỏ
nhất trong các cung thuộc đường đi - δ(P)
 Để tăng luồng dọc theo đường P: ta sẽ thêm δ(P) vào các
cung trên đường P và thay đổi giá trị mạng thặng dư
tương ứng:
cf(u,v) = cf(u,v) - δ(P) ∀ (u,v) ∈ P
cf(v,u) = cf(v,u) + δ(P) ∀ (u,v) ∈ P
Ví dụ - tăng luồng dọc theo đường P
2 7 2 8
8 8
2 1 1 2 1 0 0
s t s t
1 4 0 4
5 6 6 6
3 3

2 8/8 2 8
8/10
8
1 2 1
s t s t
4
6/6 6/10 6 6
3 3
Thuật toán Ford-Fulkerson
FORD-FULKERSON(G, s, t)
for each (u,v) ∈ E[G]
do f[u,v]:= 0
Gf = mạng thặng dư của G
while tồn tại đường p đi từ s đến t trong Gf
do δ(p):= min{cf(u,v) | (u,v) ∈ p}
for each (u,v) in p
do update Gf
Thuật toán Ford-Fulkerson
 Nếu băng thông của các cung đều nguyên và hữu hạn:
 Giá trị tăng thêm trên mỗi đường tăng luồng đều là nguyên
 Giá trị của luồng sẽ tăng ít nhất 1 sau mỗi lần lặp
 Thuật toán sẽ dừng sau không quá |f*| lần lặp
 f*(u,v) là số nguyên với mọi cung (u,v) ∈ E
Ví dụ
 Tìm luồng cực đại trong mạng sau:

12
20

16
s 10 9 7 t

13 4

14
Thuật toán Ford-Fulkerson
 Độ phức tạp: O(E.|f*|)
FORD-FULKERSON(G, s, t)
for each (u,v) ∈ E[G]
do f[u,v]:= 0
Gf = mạng thặng dư của G
while tồn tại đường p đi từ s đến t trong Gf
do δ(p):= min{cf(u,v) | (u,v) ∈ p}
for each (u,v) in p
do update Gf
Thuật toán Ford-Fulkerson
 Nếu băng thông là số vô tỉ, thuật toán có thể sẽ không kết
thúc, không hội tụ đến giá trị tối ưu
s
x x
x
1 1 α
2 3 4 5

x
x x
t

x: giá trị nguyên lớn


5−1
𝛼= ൗ2
Thuật toán Edmonds-Karp
 Vấn đề của thuật toán Ford-Fulkerson: tìm đường đi
trong mạng thặng dư
 E.K phát triển thuật toán F.F, sử dụng thuật toán tìm kiếm
theo chiều rộng để tìm đường đi s-t
 Đường tăng luồng là đường đi ngắn nhất (coi trọng số
của các cạnh đều là 1)
 Độ phức tạp của thuật toán Edmonds-Karp: O(V.E2)
Lát cắt
Lát cắt
 Định nghĩa: Lát cắt là một cách phân chia tập V thành 2
tập con là S và T = V\S trong đó s ∈ S và t ∈ T

12/12

15/20
11/16

s 10 1/4 4/9 7/7 t

8/13 4/4

11/14
S T
Lát cắt
 Khả năng thông qua của lát cắt (S,T) là
c( S , T ) =  c(u, v)
uS ,vT

12/12

11/16 15/20

s 10 1/4 4/9 7/7 t

8/13 4/4

11/14
S T

c(S,T) = ?
Lát cắt hẹp nhất
 Lát cắt hẹp nhất (S, T) là lát cắt có khả năng thông qua
c(S, T) thấp nhất

12

20
16

s 14 9 7 t

13 4

14
Lát cắt hẹp nhất (min-cut)
 Lát cắt hẹp nhất (S, T) là lát cắt có khả năng thông qua
c(S, T) thấp nhất

12

20
16

s 14 9 7 t

13 4

14
Lát cắt
 Lưu lượng thông qua 1 lát cắt (S, T) là:

𝑓 𝑆, 𝑇 = ෍ 𝑓 𝑢, 𝑣 − ෍ 𝑓 𝑢, 𝑣
𝑢∈𝑆,𝑣∈𝑇 𝑢∈𝑇,𝑣∈𝑆

12/12

11/16 15/20

s 10 1/4 4/9 7/7 t

8/13 4/4

11/14
S T

f(S,T) = ?
Bổ đề
 Lưu lượng qua một lát cắt (S,T) bất kỳ đúng bằng giá trị
của luồng.

12/12

15/20
11/16

s 10 1/4 4/9 7/7 t

8/13 4/4

11/14
Hệ quả
 Giá trị của luồng không vượt quá khả năng thông qua của
một lát cắt bất kỳ trong mạng

S T
t

s
Định lý max-flow min-cut
Cho mạng G = (V, E) có đỉnh phát là s, đỉnh thu là t
f là một luồng trong mạng G
Khi đó các mệnh đề sau là tương đương:
1. f là luồng cực đại trong mạng G
2. Mạng thặng dư không chứa đường tăng luồng nào
3. |f| = c(S, T) với một lát cắt (S, T) nào đó (lát cắt hẹp nhất)
Bài toán tổng quát
 Nhiều điểm phát, nhiều điểm thu
Giải pháp: Thêm điểm phát giả, điểm thu giả
 Giới hạn băng thông tại đỉnh
Giải pháp: Tách một đỉnh (v) thành v+ và v- với băng thông giữa
hai đỉnh này bằng băng thông giới hạn tại v
 Băng thông của cung bị chặn
Thêm đỉnh phát giả, thu giả (sa, ta) Xây dựng mạng Ga theo quy tắc:
nếu chặn dưới d(u, v) khác 0
Đặt c(sa, v) = c(u, ta) = d(u, v)
c(u, v) = c(u, c) – d(u,v)
Thêm cung (t, s) | c(t, s) = 
Và tìm luồng trên mạng mới (tr 251)
Ứng dụng
 Bài toán đám cưới vùng quê
M chàng trai, n cô gái – làm sao có nhiều đám cưới đúng ý
nhất?
 Bài toán kho hàng
M kho xuất, n kho nhập, làm sao chuyển được tối đa?
 Baseball elimination
Tại một thời điểm của vòng đấu, làm sao biết đội nào không
còn khả năng vô địch?

 Giải pháp?
Baseball elimination
 Bài toán: Giải đấu có N đội. Tại một thời điểm, đội i đã
có w[i] trận thắng và còn chơi g[i][j] trận với đội j. Một
đội hết cơ hội vô địch nếu không có khả năng nào để kết
thúc mùa giải với số điểm cao nhất. Làm sao để loại các
đội không còn khả năng vô địch?
 Câu trả lời không chỉ phụ thuộc vào số lượng trận đấu mà
còn phụ thuộc vào lịch thi đấu giữa còn lại giữa các đội.
Baseball elimination
 Ví dụ: Với bảng điểm như bảng dưới thì đội nào chắc
chắn không có cơ hội vô địch?

Against
Team Wins Loss Left Atl Phi NY Mon
--------------------------------------------
Atlanta 83 71 8 - 1 6 1
Philadelphia 80 79 3 1 - 0 2
New York 78 78 6 6 0 - 0
Montreal 77 82 3 1 2 0 -
Baseball elimination
Xét bài toán như sau:
Liệu đội Boston có còn cơ hội vô địch?

Against
Team Wins Loss Left NY Bal Bot Tor Det
---------------------------------------------------
New York 75 59 28 - 3 8 7 3
Baltimore 71 63 28 3 0 2 7 4
Boston 69 66 27 8 2 0 0 0
Toronto 63 72 27 7 7 0 0 0
Detroit 49 86 27 3 4 0 0 0
Against
Team Wins Loss Left NY Bal Bot Tor Det
-----------------------------------------------
New York 75 59 28 - 3 8 7 3
Baltimore 71 63 28 3 0 2 7 4

Baseball elimination Boston


Toronto
Detroit
69
63
49
66
72
86
27
27
27
8 2
7 7
3 4
0
0
0
0
0
0
0
0
0

Nếu Boston thắng hết => tổng: 69 + 27


Xây dựng mạng:
Cặp đấu Các đội

Số trận còn lại Số trận để bằng điểm


của cặp đấu đội được xét

Đội 3 còn cơ hội vô địch khi luồng cực đại bằng tổng giá trị ra từ nguồn.

You might also like