Toán học - Bài toán luồng cực đại trên mạng

Các khái niệm

• Bài toán luồng cực đại

• Thuật toán Ford –Fulkerson

• Minh họa ví dụ

pdf39 trang | Chia sẻ: Mr Hưng | Ngày: 01/09/2016 | Lượt xem: 98 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Toán học - Bài toán luồng cực đại trên mạng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BÀI TOÁN LUỒNG CỰC ĐẠI TRÊN MẠNG Nguyễn Văn Hiệu, 2012, Discrete Mathematics 1 Giáo viên: TS. Nguyễn Văn Hiệu Email: nvhieuqt@dut.udn.vn Nội dung • Các khái niệm • Bài toán luồng cực đại • Thuật toán Ford –Fulkerson • Minh họa ví dụ Nguyễn Văn Hiệu, 2012, Discrete Mathematics 2 Các khái niệm Mạng  Mạng là một đồ thị có hướng, có trong số G = (V, E): 1. ∃ ! đỉnh s: deg-(s) = 0, s - đỉnh phát. 2. ∃ ! đỉnh t: deg+(t) = 0, t - đỉnh thu. 3. ∀ (i,j) ∈ E: cij >0, cij - khả năng thông qua của cung (i,j). 4. Đồ thị liên thông yếu Ví dụ  Đồ thị có đỉnh phát s và đỉnh thu t  Khả năng thông qua: c s3 =5 , 3 5 5 6 3 1 3 6 6 s 2 4 t 5 3 Các khái niệm Luồng  Cho mạng G và khả năng thông qua cij ∀ 𝑖, 𝑗 ∈ 𝐸, 𝑠 đỉ𝑛ℎ 𝑝ℎá𝑡, 𝑡 đỉ𝑛ℎ 𝑡ℎ𝑢.  Luồng vận tải trên mạng G là hàm f: E  R+ : 1. f ij ≥0, ∀ (𝑖, 𝑗) ∈ 𝐸 f ij :- luồng trên cung (i,j). 2. 0  f ij  c ij , ∀ 𝑖, 𝑗 ∈ 𝐸. 3. ∀𝑣 ∶ v ≠ s, v ≠ t: f iv𝑖,𝑣 ∈𝐸 = f vj𝑣,𝑗 ∈𝐸 Ví dụ  Tập luồng f ij được miêu tả trong ngoặc màu xanh 4 5 (3) 5 (4) 6 (1) 3 (3) 1 (1) 3 (2) 6 (3) 6 (4) s 2 4 t 5 3 Các khái niệm Định lý  Cho {f ij } tập luồng trên mạng G và s đỉnh phát và t là đỉnh thu: f si𝒔𝒊 ∈𝑬 = f it 𝒊,𝒕 ∈𝑬  Nếu (i,j) ∉ 𝐸, 𝑡ℎì f ij = 0 f ij 𝑖∈𝑉𝑗∈𝑉 = f ji 𝑖∈𝑉𝑗∈𝑉 Giá trị của luồng  Cho luồng f trên G giá trị của luồng được định nghĩa là đại lượng: Val (f) = f si𝒔𝒊 ∈𝑬 = f it 𝒊,𝒕 ∈𝑬 5 Các khái niệm • Xác định giá trị của luồng f • 6 5(5) 5(2) 6(5) 3(1) 1(1) 3(0) 6(1) 6(6) 2 4 t 5 3 s Val(f) = ? Bài toán luồng cực đại Bài toán  Cho mạng G với đỉnh phát s, đỉnh thu là t, và khả năng thông qua là cij ,∀ 𝑖, 𝑗 ∈ 𝐸.  Trong số các luồng trên mạng G tìm luồng có giá trị lớn nhất Ứng dụng  Xác định cường độ lớn nhất của dòng vận tải giữa hai nút của một bản đồ giao thông. Bài toán luồng cực đại chỉ ra đoạn đường đông xe nhất.  Hệ thống đường ống dẫn dầu: ống – cung, s - tàu chở dầu, t - bể chứa, còn những điểm nối giữa các ống là các đỉnh của đồ thị. cij - diện tích ống. Cần phải tìm luồng lớn nhất để bơm từ tàu chở dầu vào bể chứa. 7 Bài toán luồng cực đại Bài toán  Cho mạng G với đỉnh phát s, đỉnh thu là t, và khả năng thông qua là cij ,∀ 𝑖, 𝑗 ∈ 𝐸.  Trong số các luồng trên mạng G tìm luồng có giá trị lớn nhất Ý tưởng  Xuất phát từ một luồng nào đó, ta tìm đường đi (không định hướng) từ s đến t,  Tiến hành hiệu chỉnh giá trị luồng trên đường đi sao cho luồng mới có gia trị lớn hớn.  Nếu không tìm được đi như vậy thì luồng đó là cực đại. 8 Bài toán luồng cực đại Bài toán  Cho mạng G với đỉnh phát s, đỉnh thu là t, và khả năng thông qua là cij ,∀ 𝑖, 𝑗 ∈ 𝐸.  Trong số các luồng trên mạng G tìm luồng có giá trị lớn nhất Ý tưởng  Giả sử P = (s, a, .,i, j , .,z, t) (i,j) = 𝑖, 𝑗 ∈ 𝐸 (𝑗, 𝑖) ∈ 𝐸  Nếu (i,j) là cung trên P thì cung đó cùng hướng với P. Ký hiệu P+ là tập cung cùng hướng với P  Nếu (j,i) là cung trên P, thì cung đó ngược hướng với P. P- là tập cung ngược hướng với P 9 Bài toán luồng cực đại Cơ sở lý luận  Cho f là luồng trên mạng G  Giả sử đường đi không định hướng từ s đến t: P = (s =a,b,...,i,j,..,z = t)  ∀ 𝑖, 𝑗 ∈ P+ : f ij < cij  ∀ 𝑖, 𝑗 ∈ P- : 0 < f ij  Đặt 𝛿:= min {x | x ∈ M }  M tập các giá trị cij - f ij với 𝑖, 𝑗 ∈ P+ và các giá trị f ij vớ𝑖 𝑖, 𝑗 ∈ P- Cơ sở lý luận  Xây dựng luồng f* như sau:  f* = f ij ∀ 𝑖, 𝑗 ∉ 𝑃 f ij + 𝛿∀ 𝑖, 𝑗 ∈ P+ f ij − 𝛿∀ 𝑖, 𝑗 ∈ P−  Giá trị luồng f* sẽ lớn hơn luồng f một đơn vi 𝛿 > 0 Val(f*) = val(f) + 𝜹 10 Bài toán luồng cực đại Tính đúng đắn  f* là luồng  (s,b) ∈ P+ f*sb = fsb + 𝛿  Val (f*) = f∗ si𝒔𝒊 ∈𝑬 = val(f) + 𝛿 Thuật toán Ford- Fullkerson  Tìm luồng cực đại  Input: Mạng G với đỉnh phát s đỉnh thu t, khả năng thông qua C = (c ij), (i,j) ∈ E  Ký hiệu s = v0, ..,vn = t  Output: F = (f ij), (i,j) ∈ E 11 Thuật toán Ford-Fullkerson  Tìm luồng cực đại  Input:  Mạng G với đỉnh phát s đỉnh thu t, khả năng thông qua C = (c ij), (i,j) ∈ E  Ký hiệu s = v0, ..,vn = t  Output:  F = (f ij), (i,j) ∈ E Thuật toán  Bước 1(khởi tạo luồng ban đầu) fịj = 0, ∀ 𝑖, 𝑗 ∈ 𝐸  Bước 2 (gán nhãn cho đỉnh phát) s( , ∞) 12 Thuật toán Ford-Fullkerson Thuật toán  Bước 1( khởi tạo luồng ban đầu) fịj = 0, ∀ 𝑖, 𝑗 ∈ 𝐸  Bước 2( gán nhãn cho đỉnh phát) s( , ∞) Thuật toán  Bước 3 (kiểm tra nhãn của đỉnh thu )  Nếu t có nhãn ----> bước 6  Nếu t chưa có nhãn--->bước 4  Bước 4( xác đỉnh đỉnh đánh dấu)  Xét các đỉnh mang nhãn mà chưa đánh dấu, chọn v: = vi, i chỉ số bé nhất.  Nếu ∃ vi, thì Đánh dấu v.  Nếu ∄ vi, thì Kết thúc và F là luồng cực đại. 13 Thuật toán Ford-Fullkerson Thuật toán  Bước 5( gán nhãn cho các đỉnh chưa có nhãn, kề với v )  Giả sử nhãn của v (𝛼, Δ)  Xét cung dạng (v,W) và (W,v) (theo thứ tự (v,v0 ) (v0 ,v), (v,v1 ) (v1 ,v), )  Cung dạng (v,W):  Nếu fvW < CvW , gán nhãn w (v, x) với x = min {Δ, CvW - fvW }  Nếu fvW = CvW , không gán nhãn cho w Thuật toán  Cung dạng (W,v):  Nếu fWv > 0 , gán nhãn w (v, x) với x = min {Δ, fWv }  Nếu fWv = 0, không gán nhãn cho w  Quay lai bước 3  Lưu ý: chỉ xét các W chưa được gán nhãn 14 Thuật toán Ford-Fullkerson Thuật toán  Bước 6 ( hiệu chỉnh luồng )  Giả sử (𝜷, 𝜹) là nhãn của t (đỉnh thu).  Đặt W0 = t, W1 = 𝜷  Nếu nhãn của wi là (𝜷`, 𝜹`)  Đặt Wi+1 = 𝜷`  (tiếp tục)  Đặt Wk = s (đỉnh phát) Thuật toán  Nhận được đường đi P từ s đến t. (s =Wk ,Wk-1 ,,W1,W0 =t )  Điều chỉnh f trên P: f = f ij ∀ 𝑖, 𝑗 ∉ 𝑃 f ij + 𝛿 , ∀ 𝑖, 𝑗 ∈ P+ f ij − 𝛿 , ∀ 𝑖, 𝑗 ∈ P−  Xóa tất cả các nhãn trên P và quay lại bước 2 15 Vi dụ • Tìm luồng cực đại trên mạng G • Thứ tự các đỉnh: s a b c d t 3 5 2 2 2 4 4 s c d t b a Vi dụ  Bước 1(khởi tạo luồng ban đầu)  fịj = 0, ∀ 𝑖, 𝑗 ∈ 𝐸  val (f) = 0 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a Vi dụ  Bước 2 (gán nhãn cho đỉnh phát) s( , ∞) 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) Vi dụ  Bước 3 (kiểm tra nhãn của đỉnh thu )  t chưa có nhãn--->bước 4 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) Vi dụ  Bước 4( xác đỉnh đỉnh đánh dấu)  Xét các đỉnh mang nhãn và chưa đánh dấu,  chọn v: = s.  Đánh dấu s (sử dụng màu để đánh dấu) 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) Vi dụ  Bước 5( gán nhãn cho các đỉnh chưa có nhãn, kề với v )  Cung kề với s  Cung (s,a):  fsa = 0< Csa = 3, gán nhãn a (s, 3) với x = min {∞, 3 - 0}  Cung (s,c):  gán nhãn c (s, 5) với  Chuyên sang bước 3 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) (s , 𝟑) (s , 𝟓) Vi dụ  Bước 3 (kiểm tra nhãn của đỉnh thu )  t chưa có nhãn--->bước 4 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) (s , 𝟑) (s , 𝟓) Vi dụ  Bước 4( xác đỉnh đỉnh đánh dấu)  Xét các đỉnh mang nhãn và chưa đánh dấu,  chọn v: = a.  Đánh dấu a (sử dụng màu để đánh dấu) 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) Vi dụ  Bước 5( gán nhãn cho các đỉnh chưa có nhãn, kề với v )  Cung kề với a  Cung (a,b):  fab = 0< Cab = 2, gán nhãn b (s, 2) x = min{3, 2-0} =2  Chuyển sang bước 3 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) ( s, 𝟑) ( s, 𝟓) ( a, 𝟐) Vi dụ  Bước 3 (kiểm tra nhãn của đỉnh thu )  t chưa có nhãn--->bước 4 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) ( s, 𝟑) ( s, 𝟓) ( a, 𝟐) Vi dụ  Bước 4( xác đỉnh đỉnh đánh dấu)  Xét các đỉnh mang nhãn và chưa đánh dấu,  chọn v: = b.  Đánh dấu b (sử dụng màu để đánh dấu) 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) ( s, 𝟑) ( s, 𝟓) ( a, 𝟐) Vi dụ  Bước 5( gán nhãn cho các đỉnh chưa có nhãn, kề với v )  Cung kề với v  Cung (b, t):  fbt = 0< Cbt = 4, gán nhãn t(b, 2) x = min{2, 4-0} =2  Chuyển sang bước 3 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) ( s, 𝟑) ( s, 𝟓) ( a, 𝟐) ( b, 𝟐) Vi dụ  Bước 3 (kiểm tra nhãn của đỉnh thu )  t --->bước 6 3 (0) 5 (0) 2 (0) 2(0) 2 (0) 4(0) 4 (0) s c d t b a ( , ∞) ( s, 𝟑) ( s, 𝟓) ( a, 𝟐) ( b, 𝟐) Vi dụ  Bước 6 ( hiệu chỉnh luồng )  W0 = t, W1 = b  W2 = a, W2 = s  Đường đi P từ s đến t. (s, a, b, t)  Điều chỉnh f trên P: f = f ij ∀ 𝑖, 𝑗 ∉ 𝑃 f ij + 2 , ∀ 𝑖, 𝑗 ∈ P+ f ij − 2 , ∀ 𝑖, 𝑗 ∈ P−  Val(f) = 2  Xóa tất cả các nhãn trên P và quay lại bước 2 3 (2) 5 (0) 2 (2) 2(0) 2 (0) 4(0) 4 (2) s c d t b a ( s, 𝟓) ( b, 𝟐) Vi dụ 3 (2) 5 (0) 2 (2) 2(0) 2 (0) 4(0) 4 (2) s c d t b a Val(f) = 2 Quay lại bước 2 Vi dụ  Bước 2 (gán nhãn cho đỉnh phát) s( , ∞)  Tiếp tục lặp quá trình thu được nhãn: 3 (2) 5 (0) 2 (2) 2(0) 2 (0) 4(0) 4 (2) s c d t b a ( , ∞) 3 (2) 5 (0) 2 (2) 2(0) 2 (0) 4(0) 4 (2) s c d t b a ( , ∞) ( s, 1) ( s, 𝟓) ( c, 𝟐) ( b, 𝟐) ( c, 𝟐) Vi dụ  Bước 2 (gán nhãn cho đỉnh phát) s( , ∞)  P = (s, c, b, t) , 𝛿 = 2 3 (2) 5 (0) 2 (2) 2(0) 2 (0) 4(0) 4 (2) s c d t b a ( , ∞) 3 (2) 5 (2) 2 (2) 2(2) 2 (0) 4(0) 4 (4) s c d t b a ( , ∞) ( s, 1) ( s, 𝟓) ( c, 𝟐) ( b, 𝟐) ( c, 𝟐) Vi dụ Val (f) = 4 Quay lại bước 2 3 (2) 5 (2) 2 (2) 2(2) 2 (0) 4(0) 4 (4) s c d t b a Vi dụ  Bước 2 (gán nhãn cho đỉnh phát) s( , ∞)  Tiếp tục lặp quá trình thu được nhãn: 3 (2) 5 (2) 2 (2) 2(2) 2 (0) 4(0) 4 (4) s c d t b a ( , ∞) 3 (2) 5 (2) 2 (2) 2(2) 2 (0) 4(0) 4 (4) s c d t b a ( ,∞) ( s, 1) ( s, 𝟑) ( d, 𝟐) ( c, 𝟐) Vi dụ  Bước 2 (gán nhãn cho đỉnh phát) s( , ∞)  P = (s, c, d, t) , 𝛿 = 2 3 (2) 5 (2) 2 (2) 2(2) 2 (0) 4(0) 4 (4) s c d t b a ( , ∞) 3 (2) 5 (4) 2 (2) 2(2) 2 (2) 4(2) 4 (4) s c d t b a ( ,∞) ( s, 1) ( s, 𝟑) ( d, 𝟐) ( c, 𝟐) Vi dụ Val (f) = 6 Quay lại bước 2 3 (2) 5 (4) 2 (2) 2(2) 2 (2) 4(2) 4 (4) s c d t b a Vi dụ  Bước 2 (gán nhãn cho đỉnh phát) s( , ∞)  Không tồn tại đỉnh mang nhã mà chưa đánh dấu – KẾT THÚC 3 (2) 5 (4) 2 (2) 2(2) 2 (2) 4(2) 4 (2) s c d t b a ( , ∞) 3 (2) 5 (2) 2 (2) 2(2) 2 (2) 4(2) 4 (4) s c d t b a ( , ∞) ( s, 1) ( s, 𝟑) Bài tập THAT’S ALL; THANK YOU What NEXT?

Các file đính kèm theo tài liệu này:

  • pdf11_luong_cuc_dai_tren_mang_1882.pdf
Tài liệu liên quan