Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
261,43 KB
Nội dung
CHƯƠNG BÀI TOÁN LU NG C C Đ I TRONG M NG N I DUNG: Giới thiệu tốn Định lý Ford-Fulkerson Thuật tốn tìm luồng cực đại mạng Một số toán luồng tổng quát ng dụng 6.1 Giới thiệu tốn M ng Mạng đồ thị có hướng G = (V, E) thỏa mãn: - Có đỉnh s khơng có cung vào gọi điểm phát; - Có đỉnh t khơng có cung gọi điểm thu; - Mỗi cung e = (u, v) E có trọng số khơng âm c(e) = c(u, v) gọi khả thông qua c a cung e 2 Lu ng m ng Luồng f mạng G = (V, E) ánh xạ f: E R gán cung e = (u, v) E số thực không âm f(e) = f(u, v) gọi luồng cung e thỏa mãn điều kiện: (1) Luồng cung e E không vượt khả thông qua: ≤ f(e) ≤ c(e); (2) Điều kiện cân luồng đỉnh v V, v ≠ s, t: Tổng luồng cung vào v tổng luồng cung khỏi v Ký hiệu Γ-(v) = {u V: (u, v) E}, Γ+(v) = {w V: (v, w) E} Divf(v) = ∑u Γ-(v) f(u, v) - ∑w Γ+(v) f(v, w) = 3 Giá trị lu ng Giá trị c a luồng f val(f) = ∑v Γ+(s) f(s, v) = ∑u Γ-(t) f(u, t) Bài toán lu ng c c đ i Input: Mạng G = (V, E); Output: Luồng f* có giá trị luồng val(f*) lớn nhất; Ví dụ lu ng: - Hệ thống ống dẫn dầu bơm từ tàu chở dầu vào bể ch a dầu - Hệ thống tuyến đường giao thông nối sân bay Nội Hồ Hoàn kiếm 6.2 Định lý Ford-Fulkerson Lát cắt: Cho X tập đỉnh X* = V\X với s X t X* (X, X*) gọi lát cắt Khả thông qua c a lát cắt: c(X, X*) = ∑uX, v X* c(u, v) Lát cắt có khả thơng qua nhỏ gọi lát cắt hẹp Bổ đề Giá trị c a luồng f không vượt khả thông qua c a lát cắt bất kỳ: val(f) ≤ c(X, X*) Giá trị luồng cực đại không vượt khả thông qua c a lát cắt hẹp M t s khái niệm - Cho luồng f mạng G = (V, E) Xét đồ thị có trọng số Gf sau: (1) Nếu e = (u, v) E với f(u, v) = e = (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) e = (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) e = (u, v) Ef với trọng số c(u, v) - f(u, v) e = (v, u) Ef với trọng số f(u, v) - Các cung c a Gf cung c a G gọi cung thuận - Các cung c a Gf không cung c a G gọi cung nghịch - Gf gọi đồ thị tăng luồng - Gọi P = (s = v0, v1, , vk = t) đường từ s đến t Gf giá trị nhỏ c a trọng số cung thuộc P Xây dựng luồng f’: (1) Nếu (u, v) P cung thuận f’(u, v) = f(u, v) + ; (2) Nếu (u, v) P cung nghịch f’(u, v) = f(u, v) - ; (3) Nếu (u, v) P f’(u, v) = f(u, v) val(f*) = val(f) + Th tục tăng luồng dọc theo P - Mọi đường từ s đến t Gf đường tăng luồng f Định lý Ford-Fullkerson Các mệnh đề sau tương đương: (1) f luồng cực đại mạng; (2) Khơng tìm đường tăng luồng; (3) Giá trị luồng f khả thông qua c a lát cắt đó: val(f) = c(X, X*) 6.3 Thuật tốn tìm lu ng c c đ i m ng Input: Mạng G = (V, E) cho ma trận trọng số c[i][j]; Đỉnh phát s; Đỉnh thu t; Output: Luồng cực đại f; giá trị luồng val(f); 10 Thuật toán Max_Flow { // Khởi tạo for u V for v V {f(u, v) = 0; } //Lặp Stop = 0; while (!Stop) { if (Tìm được đường tăng luồng P) { ; } else Stop = 1; } return (f, val(f)); } 11 void FindPath(){ int cq, dq, u, v; int Stop = 1; for (u = 1; u 0) { p[v] = -u; d[v] = Min(d[u], fl[v][u]); cq++; q[cq] = v; vs[v] = 1; if (v = t) return; } } } Stop = 0; } 12 13 6.4 M t s toán lu ng tổng quát M ng có nhiều điểm phát, nhiều điểm thu Xét mạng G có p điểm phát s1, …, sp q điểm thu t1, …, tq Một luồng xuất phát từ đỉnh phát đến đỉnh thu định nghĩa tương tự - Bài toán luồng cực đại G đưa toán cách bổ sung đỉnh phát giả s đỉnh thu giả t - Từ đỉnh phát giả s có cạnh nối đến đỉnh phát s1, …, sp với khả thông qua vô lớn - Từ đỉnh thu t1, …, tq có cạnh nối đến đỉnh thu giả t với khả thông qua vơ lớn 14 Thuật tốn tìm lu ng c c đ i: - Tìm luồng cực đại f* mạng G {s, t} thuật toán Max_Flow; - Bỏ hai đỉnh giả s t có luồng cực đại f* G với val(f*) 15 Bài tốn với khả thơng qua c a đỉnh c nh Xét mạng G Ngồi khả thơng qua c[u][v] cạnh (u, v) E, có khả thông qua c a đỉnh v số nguyên không âm d[v], v V Luồng f mạng G phải thỏa mãn thêm điều kiện: tổng luồng vào đỉnh v không vượt d[v] Yêu cầu: Tìm luồng cực đại s t 16 Thuật toán: (1) Xây dựng mạng G’sao cho v G tương ng hai đỉnh v+, v- G’ với khả thông qua: c[u-][v+] = c[u][v]; c[v-][w+] = c[v][w]; c[v-][v+] = d[v]; (2) Tìm luồng cực đại f* G’; (3) Xuất f* G val(f*); 17 M ng có khả thơng qua bị chặn hai phía Xét mạng G Khả thơng qua cạnh (u, v) E có cận c[u][v] cận d[u][v] Luồng f mạng G phải thỏa mãn thêm điều kiện: d[u][v] ≤ f[u][v] ≤ c[u][v] Yêu cầu: Tìm luồng cực đại s t 18 Thuật toán: (1) Đưa vào hai đỉnh phát giả su thu giả tu; Xây dựng mạng Gu cho cung (u, v) có d[u][v] ≠ tương ng hai cung (su, v) (u, tu) với khả thông qua d[u][v]; khả thông qua c a (u, v) c[u][v] – d[u][v]; (2) d* = ∑(u, v) E d[u][v]; (3) Tìm luồng cực đại f* Gu; (4) Nếu val(f*) = d* Xuất luồng f tương thích f* G val(f); 19 6.5 ng dụng B ghép c c đ i Cho đồ thị hai phía G với V = X Y, X Y = ; Bộ ghép M G cặp (x, f(x)) với đơn ánh f: X Y u cầu: Tìm M có số lượng phần tử lớn Ví dụ: 1) Bài tốn phân việc; 2) Bài toán đám cưới vùng quê 20 Thuật toán: (1) Đưa vào hai đỉnh phát giả su thu giả tu; Xây dựng mạng Gu gồm cung (u, v) E thêm cung (su, u) (v, tu), u X v Y với khả thơng qua 1; (2) Tìm luồng cực đại f Gu; (3) Xuất cặp (u, v) f[u][v] > 0, u X v Y val(f); Ghi - Xét đồ thị hai phía có trọng số khơng âm; - Tìm ghép M có số cặp lớn tổng trọng số lớn nhất; - Thuật toán tương tự 21 Hệ đ i diện chung Cho X = {z1, z2, …, zm} hai dãy tập c a X: ; Dãy n phần tử khác c a X: (a1, …, an) gọi hệ đại diện chung c a hai dãy tồn hoán vị c a số {1, , n} (h1, …, hn) thỏa mãn Ai Bhi, với i = 1, …, n Yêu cầu: Tìm hệ đại diện chung (a1, …, an) 22 Thuật toán: (1) Xây dựng mạng G = (V, E) với: V = {s, t} {x1, …, xn} {u1, …, um} {v1, …, vm} {y1, …, yn}; xi tương ng Ai, yi tương ng Bi, uj, vj tương ng zj; E = {(s, xi)| i = 1, …, n} {(xi, uj| zj Ai} {(ui, uj)} {vj, yi)} {(yi, t)}; khả thông qua cung 1; (2) Tìm luồng cực đại f G; (3) Nếu val(f) = n Xuất (a1, …, an), với aj tương ng zj; 23 ... đơn ánh f: X Y Yêu cầu: Tìm M có số lượng phần tử lớn Ví dụ: 1) Bài toán phân việc; 2) Bài toán đám cưới vùng quê 20 Thuật toán: (1) Đưa vào hai đỉnh phát giả su thu giả tu; Xây dựng mạng Gu... a hai dãy tồn hoán vị c a số {1, , n} (h1, …, hn) thỏa mãn Ai Bhi, với i = 1, …, n Yêu cầu: Tìm hệ đại diện chung (a1, …, an) 22 Thuật toán: (1) Xây dựng mạng G = (V, E) với: V = {s, t}... thu t1, …, tq Một luồng xuất phát từ đỉnh phát đến đỉnh thu định nghĩa tương tự - Bài toán luồng cực đại G đưa toán cách bổ sung đỉnh phát giả s đỉnh thu giả t - Từ đỉnh phát giả s có cạnh nối