cả các cung bằng 0 (ta sẽ gọi luồng như vậy là luồng không), và 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 – F[r]
(1)(2)Giới thiệu
Luồng mạng
Bài toán luồng cực đại
Thuật toán Ford Fulkerson
(3)Nguyễn Đức Nghĩa, Nguyễn Tơ Thành, Tốn rời
rạc, ltb 1, nxb Giáo dục, 1998, ch 7, tr 215 – 236
Đỗ Minh Hoàng, Bài giảng Chuyên đề Giải thuật &
Lập trình, ĐHSP Hà Nội, 2004, ch 10, tr 257 – 267
Dương Anh Đức, Trần Đan Thư, Bài giảng lý
(4)Luồng cực đại toán tối ưu
trên đồ thị tìm ứng dụng rộng rãi thực tế lý thuyết tổ hợp
Bài toán đề xuất vào đầu năm 1950
gắn liền với tên tuổi nhà toán học Mỹ: Ford
(Lester Randolph Ford: 1927 - ) Fulkerson
(5)Mạng (network) đồ thị có hướng G = (V, E)
trong đó:
Có đỉnh s khơng có cung vào, gọi
đỉnh phát (source)
Có đỉnh t khơng có cung ra, gọi
đỉnh thu (sink)
Mỗi cạnh e = (u, v) E gán số nguyên không âm
c(e) = c[u, v] gọi khả thơng qua cung (capacity)
Ta quy ước mạng khơng có cung (u, v) ta thêm
(6)Với mạng G = (V, E, c), ta ký hiệu:
W-(v) = {(u, v) E | u V}: tập cung vào đỉnh v W+(v) = {(v, u) E | u V}: tập cung khỏi
(7)Giả sử cho mạng G = (V, E) Ta gọi luồng f
mạng ánh xạ f: E R+ gán cho cung e = (u,
v) E số thực không âm f(e) = f[u, v], thoả mãn
các điều kiện sau:
ĐK (Capacity Constraint): Luồng cung e
E không vượt q khả thơng qua nó: ≤ f(e) ≤ c(e)
ĐK (Flow Conversion): Điều kiện cân luồng
trên đỉnh mạng: Tổng luồng cung vào đỉnh v tổng luồng cung khỏi đỉnh v, v s, t
(8)Giá trị luồng tính tổng giá trị
các cung từ đỉnh nguồn s, tổng giá trị cung vào đỉnh thu t
(9)(10)Cho mạng G = (V, E), tìm luồng f*
(11)3 t s 5, 2, 1, 5, 4, 4, 3, 3, 3 t s 6
(12)Xét đồ thị tương ứng hệ thống ống dẫn dầu Trong
đó ống tương ứng với cung, điểm phát tàu chở dầu, điểm thu bể chứa, điểm nối ống nút đồ thị Khả thông qua cung tương ứng tiết diện ống
Cần phải tìm luồng dầu lớn bơm từ tàu
(13)Bài tốn cặp ghép: có m chàng trai n gái Mỗi
chàng trai ưa thích số gái Hãy tìm cách ghép cặp cho số cặp ghép nhiều
G T
T
G
t s
1
1
1
1
1
T
G
T
1
(14)Ta gọi lát cắt (X, X*) cách phân hoạch tập
đỉnh V mạng thành tập X X* = V\X, s X t X* Khả thông qua lát cắt
(X, X*) số
Lát cắt mà khả thông qua nhỏ gọi lát
cắt hẹp nhất
(15)(16)Giá trị luồng f mạng nhỏ
hoặc khả thông qua lát cắt (X, X*) nó:
val(f) ≤ c(X, X*)
Từ suy ra: Giá trị luồng cực đại mạng
không vượt khả thông qua lát cắt hẹp mạng
Định lý: Giá trị luồng cực đại mạng
(17)Giả sử f luồng mạng G = (V, E) Từ mạng G =
(V, E) ta xây dựng đồ thị có trọng số cung Gf = (V, Ef)
với tập cung Ef trọng số cung xác định
theo quy tắc sau:
1 Nếu e = (u, v) E với f(u, v) = (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) (v, u) Ef với
trọng số f(u, v)
3 Nếu e = (u, v) E với < f(u, v) < c(u, v) (u, v) Ef với
trọng số c(u, v) – f(u, v) (v, u) Ef với trọng số f(u, v)
Các cung Gf đồng thời cung G gọi
(18)(19)Giả sử P = (s = v0, v1, v2… vk = t) đường từ
s đến t đồ thị tăng luồng Gf Gọi k trọng số cung nhỏ đường P Xây dựng luồng f’ theo quy tắc sau:
f’(u, v) = f(u, v) + k, (u, v) P cung thuận f’(u, v) = f(u, v) – k, (u, v) P cung nghịch f’(u, v) = f(u, v) (u, v) P
Dễ dàng kiểm tra f’ xây dựng
luồng mạng val(f’) = val(f) + k
Thủ tục tăng luồng gọi tăng luồng dọc theo
(20)Đường tăng luồng f đường từ s đến t
đồ thị tăng luồng Gf
Các mệnh đề tương đương: f luồng cực đại mạng
2 Không tìm đường tăng luồng f
(21)CM 3: Ký hiệu X tập đỉnh đến từ s,
Đặt X* = V\X Lúc (X, X*) lát cắt f(u, v) = với u X* v X Do đó:
(22)Bước khởi tạo: Bắt đầu từ luồng với luồng tất
cả cung (ta gọi luồng luồng không), lặp lại bước lặp sau thu luồng mà khơng cịn đường tăng
Bước lặp tăng luồng (Ford – Fulkerson): Tìm
đường tăng P luồng có Tăng luồng dọc theo P
Khi có luồng cực đại, lát cắt hẹp tìm
(23)4 t s 4, 10, 10 10, 10 0, 4, 6,
4, 6,
6 0, 0, 4, 6,
(24)4 t s 4, 10, 10 10, 10 0, 4, 6, 4,
5 6,
6
7
0, 0,
1 4, 6,
6
(25)4 t s 4, 10, 10 10, 10 1, 4, 7, 3,
5 5,
6
7
0, 1,
1 3, 6,
6
(26)(27)Có cần xây dựng đồ thị tăng luồng?
Không cần xây dựng tường minh
Tìm đường tăng luồng theo giải thuật nào?
Tìm đường theo chiều sâu
Tìm đường theo chiều rộng
(28)Mỗi đỉnh có trạng thái: chưa có nhãn, có
nhãn chưa xét, có nhãn xét
Nhãn đỉnh gồm có phần:
p(v): Đỉnh trước đỉnh v đường tăng luồng tìm e(v): lượng lớn tăng (giảm)
Đầu tiên, khởi tạo cách gán nhãn đỉnh s chưa
xét, đỉnh khác chưa có nhãn
Từ đỉnh có nhãn chưa xét, gán nhãn cho tất
(29)Cập nhật phần (*)?
Nếu c[u, v] > f[u, v] < c[u, v] // cịn tăng!
p[v] = u
e[v] = min{e[u], c[u, v] – f[u, v]}
Nếu c[v, u] > f[v, u] > // thử quay ngược lại
(30)v = p[t]; u = t; tang = e[t];
while (u s) {
if (v > 0) {
f[v, u] += tang; } else {
v = -v;
f[u, v] = f[u, v] – tang; }
u = v;
(31)void Flow(int u, e) visit[u] = True; if (u == t)
incF = e; return;
if (visit[t]) return;
for (int i = 0; i < n; i++) if (!Visit[i])
if (c[u, i] > f[u, i])
Flow(i, min(e, c[u, i] – F[u, i])); if (visit[t])
F[u, i] += incF; return;
if (F[i, u] > 0)
Flow(i, min(e, F[i, u])); if (visit[t])
(32)void MaxFlow() {
FillZero(F, sizeof(F), 0); do {
FillZero(visit, sizeof(visit), 0); Flow(s, +);
(33)Mạng với nhiều điểm phát điểm thu
t1 s1
sn
tm
t s
s2
t2
(34)Khả thông qua cung đỉnh
u
v
t s
5
6
1
6
6
3
8
u-u
+
5
6
(35)Khả cung bị chặn phía
u
v
t s
r(u, t), c(u, t)
0, c(v, t) 0, c(u, v)
0, c(s, u)
(36)u
t s
r(u, t), c(u, t)
0, c(u, v) 0, c(s, u)
Cung r(u, v) 0, thay (S, v) (u, T) = r(u, v) c(u, v) = c(u, v) – r(u, v)
Thêm cung (t, s) với c(t, s) =
u
t s
c(u, t) - r(u, t)
c(u, v) c(s, u)
T
r(s, v)
r(u, t)
(37)Bài toán đám cưới vùng quê (bài toán cặp ghép)
G T
T
G
t s
1
1
1
1
1
T
G
T
1
(38)Bài toán hệ thống đại diện chung: Cho tập gồm m
phần tử X = {z1, z2… zm} Giả sử <A1, A2 An> <B1, B2… Bn> dãy tập hợp X
Dãy gồm n phần tử x1, x2… xn gọi hệ thống
(39)Bài tốn hệ thống đại diện chung – Ví dụ
Một giải vơ địch bóng đá có M cầu thủ đăng ký thi
đấu Mỗi cầu thủ giải bắt buộc phải thuộc câu lạc bóng đá hội lao động
Có N câu lạc A1, A2 An N hội B1, B2… Bn
Ban tổ chức giải liên đoàn lao động cần chọn
một ban đại diện gồm N cầu thủ cho câu lạc hội lao động có thành viên ban đại diện
(40)Các toán tối ưu rời rạc – Bài tốn luồng chi
phí nhỏ nhất
Cho mạng có n đỉnh Mỗi cạnh mạng có
khả thơng qua c(u, v) cước phí vận chuyển p(u, v) định ứng với đơn vị hàng
Cho trước lượng hàng S cần vận chuyển từ
(41)Các toán tối ưu rời rạc – Luồng chi phí nhỏ
Nếu khơng cần vận chuyển lúc?
(42)Khả liên thông cạnh (Edge Connectivity)
của đồ thị vô hướng số cạnh cực tiểu k, cho gỡ bỏ k cạnh đồ thị khơng cịn liên thơng
Ví dụ: Đối với đồ thị dạng cây, k = Với đồ thị
(43)Đường bao phủ (path cover) đồ thị vô
hướng G = (V, E) tập hợp P đường rời G cho đỉnh V nằm xác đường P
Các đường bắt đầu kết thúc
đâu, có chiều dài (nghĩa có đỉnh toàn đỉnh V)
Một path cover cực tiểu G path cover có
(44)1 Tìm luồng cực đại cho mạng sau:
3
t s
1
3
9
1
1
(45)2 Hãy nêu giải pháp để giải vấn đề liên thơng cạnh
3 *Hãy nêu giải pháp tìm path cover cực tiểu Chứng minh luồng cực đại mạng G =
(V, E) xác định sau dãy tối đa | E| trình tìm đường tăng luồng