Giáo trình Toán rời rạc - Bài 21: Luồng trên mạng - Trần Vĩnh Đức

Luồng trên mạng  
V0.1  
Trần Vĩnh Đức  
HUST  
Ngày 20 tháng 11 năm 2019  
1 / 34  
Tài liệu tham khảo  
▶
S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani,  
Algorithms, July 18, 2006.  
2 / 34  
Nội dung  
Bài toán luồng cực đại trên mạng  
Thuật toán Ford-Fulkerson  
Luồng cực đại và lát cắt cực tiểu  
Tính hiệu quả của thuật toán  
Bài toán chuyển dầu  
4 / 34  
Mô hình bài bài toán  
a
2
1
1
d
1
10  
3
3
4
2
5
s
t
b
c
e
5
▶
▶
Đồ thị có hướng biểu diễn mạng đường ống, dầu có thể được  
chuyển qua đường ống này  
Mục tiêu là chuyển dầu từ s đến t, nhiều nhất có thể.  
5 / 34  
Một luồng chuyển 7 đơn vị dầu từ s tới t  
khả năng thông qua  
luồng  
2/2  
1/1  
1/1  
a
d
0/1  
e
0/10  
2/3  
1/3  
4/4  
2/2  
s
t
b
5/5  
5/5  
c
Liệu có cách nào làm tốt hơn?  
6 / 34  
Mạng  
Định nghĩa  
Một mạng được định nghĩa là bộ G = (V, E, s, t, c), ở đây  
▶
(V, E) là một đồ thị có hướng;  
▶
s, t ∈ V, gọi là đỉnh nguồn và đỉnh đích; và  
▶
c là một hàm gắn trên mỗi cạnh e của G một giá trị ce > 0  
gọi là khả năng thông qua.  
Bài toán  
Ta muốn chuyển nhiều dầu nhất có thể từ s tới t mà không vượt  
quá khả năng thông qua trên mỗi cạnh.  
7 / 34  
Định nghĩa (Luồng)  
Một luồng trên mạng G là một hàm  
f : E −→ R+ ∪ {0},  
gắn mỗi cạnh e của G với một giá trị số fe, sao cho:  
1. Không vi phạm khả năng thông qua:  
0 ≤ fe ≤ ce với mọi e ∈ E  
2. Với mọi đỉnh u, ngoại trừ s và t, tổng luồng vào u bằng tổng  
luồng ra khỏi u:  
∑
∑
fwu  
=
fuz.  
(w,u)∈E  
(u,z)  
Nói cách khác, mạng là bảo toàn (theo luật Kirchhoff).  
8 / 34  
Luồng và lượng dầu chuyển  
khả năng thông qua  
luồng  
2/2  
1/1  
1/1  
a
d
0/10  
2/3  
1/3  
4/4  
2/2  
s
0/1  
5/5  
e
t
b
5/5  
c
9 / 34  
Định nghĩa  
Giá trị của luồng là tổng lượng gửi từ s đến t. Theo luật bảo  
toàn, size(f) bằng lượng rời khỏi s:  
∑
size(f) =  
fsu.  
(s,u)∈E  
▶
▶
Mục đích của chúng ta là tìm được luồng có giá trị cực đại.  
Tương đương, tìm cách gán giá trị  
{fe : e ∈ E}  
thỏa mãn một số ràng buộc.  
Đây là một bài toán quy hoạch tuyến tính.  
▶
10 / 34  
Ví dụ  
Bài toán tìm luồng cực đại trong mạng  
a
1
1
1
1
s
t
1
b
tương đương với bài toán quy hoạch tuyến tính  
max fsa + fsb  
0 ≤ fsa, fsb, fab, fat, fbt ≤ 1  
fsa = fat + fab  
fsb + fab = fbt  
11 / 34  
Nội dung  
Bài toán luồng cực đại trên mạng  
Thuật toán Ford-Fulkerson  
Luồng cực đại và lát cắt cực tiểu  
Tính hiệu quả của thuật toán  
Thuật toán tham lam  
▶
Bắt đầu với luồng 0  
Lặp lại: Chọn một đường đi thích hợp từ s tới t và tăng  
luồng nhiều nhất có thể dọc theo đường này.  
▶
13 / 34  
Khởi tạo  
Tăng luồng  
a
a
0/1  
0/1  
0/1  
1/1  
1/1  
0/1  
0/1  
0/1  
s
s
t
t
t
t
0/1  
0/1  
b
b
Tăng luồng  
Luồng cực đại  
a
a
1/1  
1/1  
1/1  
1/1  
1/1  
1/1  
0/1  
0/1  
s
s
1/1  
1/1  
b
b
14 / 34  
Khởi tạo  
Tăng luồng  
a
a
0/1  
0/1  
0/1  
1/1  
0/1  
1/1  
0/1  
1/1  
s
s
t
t
t
0/1  
0/1  
b
b
Hủy luồng trên cạnh a → b  
Luồng cực đại  
a
a
1/1  
1/1  
1/1  
1/1  
1/1  
0/1  
0/1  
s
s
t
1/1  
1/1  
1/1  
b
b
15 / 34  
Tìm đường tăng luồng  
Tìm cạnh (u, v) có một trong hai kiểu  
▶
(u, v) ∈ E và khả năng thông qua cuv vẫn chưa đầy. Khi đó  
fuv có thể tăng thêm nhiều nhất là  
cuv − fuv.  
▶
(v, u) ∈ E và có một luồng qua đó, tức là fvu > 0. Khi đó ta  
có thể giảm một phần hoặc toàn bộ fvu.  
16 / 34  
Đường tăng luồng  
Cạnh gốc  
Cạnh ngược  
▶
e = (u, v) ∈ E  
eR = (v, u)  
▶
▶
Luồng fe  
▶
“Giảm” luồng fe đã gửi  
▶
Khả năng ce  
Ví dụ  
Khả năng thông qua còn lại  
a
1/1  
0/1  
0/1  
1/1  
{
1/1  
ce − fe nếu e ∈ E  
cf(e) =  
s
t
fe  
nếu eR ∈ E.  
b
17 / 34  
Đồ thị tăng luồng  
Định nghĩa  
Đồ thị tăng luồng của mạng G với luồng f là đồ thị  
Gf = (V, Ef, cf) với  
Ef = {e : fe < ce} ∪ {eR : fe > 0}.  
Ví dụ  
Mạng G với luồng f và đồ thị tăng luồng Gf tương ứng.  
a
a
1/1  
0/1  
0/1  
1/1  
1
1
1
1
1/1  
1
s
s
t
t
b
b
18 / 34  
Đường tăng luồng  
Định nghĩa  
▶
Một đường tăng luồng là một đường đi từ s đến t trong đồ  
thị tăng luồng Gf.  
▶
Khả năng thông qua của đường tăng luồng P là  
cf(P) = min{cf(e) : e ∈ P}  
Augment(f, c, P)  
δ = cf(P)  
foreach cạnh e ∈ P:  
if (e ∈ E) fe = fe + δ  
else  
return f  
f(eR) = f(eR) − δ  
19 / 34  
Thuật toán Ford-Fulkerson  
Ford-Fulkerson (G)  
foreach cạnh e ∈ E: fe = 0  
Gf = đồ thị tăng luồng của G và f  
while (còn đường tăng luồng P trong Gf):  
f = Augment(f, c, P)  
Cập nhật Gf  
return f  
20 / 34  
Tải về để xem bản đầy đủ
pdf 42 trang Thùy Anh 16720 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Toán rời rạc - Bài 21: Luồng trên mạng - Trần Vĩnh Đức", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_toan_roi_rac_bai_21_luong_tren_mang_tran_vinh_duc.pdf