Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
869 KB
Nội dung
Trường THPT Chuyên Quảng Bình PHẦN I: PHẦN MỞ ĐẦU Bàitoánluồngcựcđại trong mạng là một trong số những bàitoán tối ưu trên đồ thị có những ứngdụng rộng rãi trong thực tế cũng như những ứngdụng thú vị trong lý thuyết tổ hợp. Bàitoán được đề xuất vào đầu những năm 1950, và gắn liền với tên tuổi của hai nhà bác học Mỹ là Ford và Fulkerson. Bàitoánluồngcựcđại trong mạng có nhiều ứngdụng trong thực tế như: Bàitoán xác định cường độ dò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àitoán tìm luồng dầu lớn nhất có thể bơm từ tàu chở dầu vào bể chứa của một hệ thống đường ống dẫn dầu…Ngoài ra, ứngdụng của bàitoán còn để giải các bàitoán như: Bàitoán đám cưới vùng quê, bàitoán về hệ thống đại diện chung, bàitoán phân nhóm sinh hoạt, bàitoán lập lịch cho hội nghị …Trong phạm vi đề tài này tôi sẽ trình bày về “ luồngcựcđạivàmộtsốbàitoánứng dụng” và sử dụng thuật toán của Ford và Fulkerson để giải bàitoán cụ thể. GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình PHẦN II: NỘI DUNG I. PHÁT BIỂU BÀITOÁN 1.1 Mạng, Luồng trong mạng Định nghĩa 1. Ta gọi mạng là đồ thị có hướng G = (V,E), trong đó có duy nhất một đỉnh s không có cung đi vào gọi là điểm phát, duy nhất một đỉnh t không có cung đi ra gọi là điểm thu và mỗi cung e = (v,w) E được gán với mộtsố không âm c(e) = c(v,w) gọi là khả năng thông qua của cung e. Để thuận tiện cho việc trình bày ta sẽ quy ước rằng nếu không có cung (v,w) thì khả năng thông qua c(v,w) được gán bằng 0. Định nghĩa 2. Giả sử cho mạng G = (V,E). Ta gọi luồng f trong mạng G = (V,E) là ánh xạ f: Eà R+ gán cho mỗi cung e =(v,w) E mộtsố thực không âm f(e) = f(v,w), gọi là luông trên cung e, thoả mãn các điều kiện sau: 1. Luồng trên mỗi cung e E không vượt quá khả năng thông qua của nó: 0 ≤ f (e) ≤ c(e), 2. Điều kiện cân bằng luồng trên mỗi đỉnh của mạng : Tổng luồng trên các cung đi vào đỉnh v bằng tổng luồng trên các cung đi ra khỏi đỉnh v, nếu v ¹ s,t: 0),()()( )()( =−= ∑∑ + Γ∈ − Γ∈ vwvw f wvfvfvDiv Trong đó - tập các đỉnh của mạng mà từ đó có cung đến v, - tập các đỉnh của mạng mà từ v có cung đến nó: { } { } .),(:)(,),(:)( EwvVwvEvwVwv ∈∈=Γ∈∈=Γ +− 3.Giá trị của luồng f là số .),(),()( )()( ∑∑ − Γ∈ + Γ∈ == twsw twfwsffval 1.2 Bàitoánluồngcựcđại trong mạng GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình Cho mạng G=(V,E). Hãy tìm luồng f* trong mạng với giá trị luồng val(f*) là lớn nhất . Luồng như vậy ta sẽ gọi là luồngcựcđại trong mạng. Bàitoán như vậy có thể xuất hiện trong rất nhiều ứngdụng thực tế . chẳng hạn khi cần xác định cường độ lớn nhất của dòng vận tải giữa 2 nút của một bản đồ giao thông. Trong ví dụ này của bàitoánluồngcựcđại xẽ chỉ cho ta các đoạn đường đông xe nhất và chúng tạo thành “chỗ hẹp” tương ứng với dòng giao thỗng xét theo hai nút được chọn. Một ví dụ khác là nếu xét đồ thị tương ứng với một hệ thống dẫn dầu. Trong đó các ống tương ứng với các cung , điểm phát có thể có thể là tàu chở dầu, điểm thu là bể chứa, còn những điểm nối giữa các ống là các nút của đồ thị. Khả năng thông qua của các cung tường ứng với tiết diện các ống.Cần phải tìn luộng dầu lớn nhất có thể bơm từ dầu vào bể chứa. 1.3 Thuật toán Ford-Fulkerson Việc chứng minh định lý luồngcực đại-lát cắt cực tiểu ngay lập tức cho chúng ta một thuật toán Tìm luồngcực đại- thuật toán Ford-Fulkerson: • Khởi tạo mộtluồng bằng 0. • Trong khi đồ thị tăng luồng của f còn có đường đi cơ bản (đường tăng luồng), thì tìm một đường đi như thế, nâng luồng dọc theo đường đi này. • Khi không còn đường đi cơ bản nữa thì f là luồngcực đại. Đoạn chương trình sau minh họa thuật toán Ford-Fulekerson bằng NNLT Pascal, trong đó sử dụng tìm kiếm sâu DFS để tìm một đường tăng luồng trên đồ thị tăng luồng. Procedure Findpath(u:integer);{tìm đường tăng luồng trên G f } Var v:integer; Front, rear: integer; Begin Trace [s]:= n+1; {Trace[v] = 0 nghĩa là v chưa được thăm} For v :=1 to n do Begin If (trace[v] = 0) and (c[u,v]>f[u,v]) then {xét v kề u chưa thăm trên G f } Begin GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình Trace[v]:=u; if v=t then {đến được t thì dừng thuật toán } Begin path := True; exit; End; findpath(v); End; if path =true then exit; End; End; Procedure IncFlow; {tăng luông dọc đường tăng luồng: f :=(f+f f )} Var Delta, u, v: Integer; Begin {Tính Delta = Δ f } Delta:= Maxint; V :=t; Repeat U := trace[v]; If c[u,v] - f[u,v] < Delta then Delta := c[u,v] – f[u,v] ; V := u; Until v = s; {f := (f+f f ) V :=t; Repeat u := trace[v]; f[u,v] :=f[u,v] + Delta ; f[u,v] :=f[u,v] - Delta ; v :=u ; until v = s; End; Trong đó: • C[1 n,1 n]: ma trận biểu diễn khả năng thông qua các cung trên mạng. GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình • F[1 n,1 n]: ma trận biểu diễn luồng trên các cung. • Trace[1 n]: dùng để lưu vết đường tăng luồng, thuật toán tìm đường tăng luồng sẽ sử dụng là thuật toán tìm kiếm theo chiều sâu (DFS). Ta có thể tìm kiếm (u,v) có phải là cung trên mạng thặng dư G f không bằng đẳng thức: c[u,v]>f[u,v]. Nếu (u,v) là cung trên G f thì khả năng thông qua của nó là c[u,v] –f[u,v] Ví dụ 1: Xét mạng vận tải G =(V,E) được cho ở hình sau với 1 là đỉnh phát, 6 là đỉnh thu, luồng được đặt trong ngoặc, khả năng thông qua được ghi trên các cung : Sử dụng thuật toán Ford-Fulkerson để tìm luồngcựcđạivà lát cắt nhỏ nhất 1. Bước 1: Khởi tạo luồng f =0. 2. Bước 2: • Đồ thị tăng luồng G f của G: GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình • Chọn đường tăng luồng P = (1,2,4,6), tăng luồng dọc theo đường này: - Δ P = min( 5,6,6) = 6. - Tăng luồng dọc theo P thu được luồng mới f = 5: -Đồ thị tăng luồng: • Chọn đường tăng luồng P = (1,3,5,6), tăng luồng dọc theo đường này: - Δ P = min( 5,1,6) = 1. - Tăng luồng dọc theo P thu được luồng mới f = 6: GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình - Đồ thị tăng luồng: • Chọn đường tăng luồng P = (1,3,4,2,5,6), tăng luồng dọc theo đường này: - Δ P = min( 4,3,5,3,5) = 3. - Tăng luồng dọc theo P thu được luồng mới f = 9: - Đồ thị tăng luồng: GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình Đến đây không còn đường đi cơ bản nào trên đồ thị tăng luồng nên thuật toán kết thúc. Bước 3: LuồngcựcđạiLuồngcựcđại có giá trị là 9, lát cắt cực tiểu (X,Y) với X={1,3}, Y={2,4,5,6} Định lý về tính nguyên: “Nếu tất cả các khả năng thông qua là số nguyên thì thuật toán trên luôn tìm được luồngcựcđại với luồng trên cung là các số nguyên. Goị e số cạnh của đồ thị, n là số đỉnh => e = E, n =V. Thuật toán Ford Fulkerson có độ phức tạp là O(e) ở mỗi lần thực hiện, nhưng số lần lặp không chính xác, xấp xỉ giá trị luồngcựcđại f, tức là thuật toán này có độ phức tạp là một hàm đa thức, vì vậy, chúng ta cần đến một thuật toán mà thời gian thực hiện không phụ thuộc chút nào vào C. Xét cho cùng, các thuật toán tìm đường đi ngắn nhất với khả năng thông qua của cung e là c e , nhưng thời gian thực hiện của các thuật toán này chỉ phụ thuộc các tham số e và n. Một thuật toán như thế gọi là “phụ thuộc đa thức mạnh” (strongly polynomial). GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình Ví dụ 2: Xét mạng vận tải G được cho ở hình sau: Trong đó: 1 là đỉnh phát, 6 là đỉnh thu, giá trị luồng được viết trong ngoặc và khả năng thông qua được cho trên mỗi cạnh. Ta sẽ dùng thuật toán Ford- Fulkersons để tìm luồngcựcđạivà lát cắt cực tiểu trên G. a. Dùng thuật toán Ford-Fulkersons: Bước 1: Khởi tạo luồng f=0: Bước 2: Tăng luồng: • Đồ thị tăng luồng: GV: Trương Nữ Thùy Duyên 9 2 1 3 4 5 6 5(2) 7(4) 5(3) 7(2) 5(4) 7(3) 9(6) 8(0) 2 1 3 4 5 6 5(0) 7(0) 5(0) 7(0) 5(0) 7(0) 9(0) 8(0) 2 1 3 4 5 6 5 7 5 7 5 7 8 Trường THPT Chuyên Quảng Bình • Chọn đường tăng luồng P = (1,2,5,6), tăng luồng dọc theo đường này: - Δ P = min( 5,7,9) = 5. • Tăng luồng dọc theo P thu được luồng mới f = 5: • Đồ thị tăng luồng: • Chọn đường tăng luồng P = (1,3,2,5,6), tăng luồng dọc theo đường này: - Δ P = min( 7,8,2,4) = 2. - Tăng luồng dọc theo P thu được luồng mới f = 7: • Đồ thị tăng luồng: • Chọn đường tăng luồng P = (1,3,5,6), tăng luồng dọc theo đường này: GV: Trương Nữ Thùy Duyên 2 3 4 5 6 5 7 5 2 5 7 8 5 1 54 2 1 3 4 5 6 5(5) 7(2) 5(0) 7(7) 5(0) 7(0) 9(7) 8(2) 2 1 3 4 5 6 5 5 5 2 5 7 2 6 7 7 2 2 [...]... trình bày bàitoánluồngcựcđạivà thuật toán Ford – Fulkerson Đề tài cũng đưa ra được một sốbàitoánứngdụng cụ thể của bàitoánluồngcựcđại Hy vọng chúng ta có thể hiểu thêm thuật toán tìm luồngcựcđạivà áp dụng để giải được các bàitoán đã đặt ra Đề tài có mộtsố hạn chế như sau: - - Chưa trình bày được một thuật toán tìm luồngcựcđại khác như Thuật toán Edmonds-Karp để so sánh và đối chiếu... với luồngcựcđại End GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình II MỘTSỐBÀITOÁN TỐI ƯU TỔ HỢP ỨNGDỤNG TỪ BÀITOÁNLUỒNGBàitoánluồngcựcđại có rất nhiều ứng dụng trong việc giải nhiều bàitoán tổ hợp Khó khăn chính ở đây là phải xây dựng tương ứng sao cho việc tìm luồngcựcđại trong nó sẽ tương đương với việc giải bàitoán đặt ra Mục này sẽ giới thiệu một sốbàitoán như vậy 2.1 Bài. .. Bắt đầu từ luồng 0, ta tìm luồngcựcđại trong mạng xây dựng được theo thuật toán Ford- Fulkerson Từ định lý về tính nguyên, luồng trên các cung là các số 0 hoặc 1 Rõ ràng là nếu luồngcựcđại trong đồ thị có giá trị Vmax = m, thì bàitoán có lời giải, và các cung với luồng bằng 1 sẽ chỉ ra cách tổ chức đám cưới thoả mãn điều kiện đặt ra Ngược lại, nếu bàitoán có lời giải thì Vmax=m bàitoán về các... thuật toán tìm luồngcựcđại để giải mộtbàitoán tối ưu rời rạc là mô hình toán học cho một sốbàitoán tối ưu tổ hợp Xét bàitoán tối ưu rời rạc f ( x1 , x 2 , , x n ) = max n ∑ xij 1≤i ≤m j =1 → min (1) với điều kiện n a ∑ ij xij = pi , i =1,2, , m, (2) j= 1 xij = 0 hoặc 1, j=1,2,…,n (3) trong đó aij ∈ {0,1}, i= 1,2,…,m; j= 1,2,…,n, pi - nguyên dương, i=1,2,…,m Bàitoán (1)-(3) là mô hình toán học... thấy rằng hệ thống đại diện chung của hai dãy và tồn tại khi và chỉ khi trong mạng G = (V,E) tìm được luồng với giá trị n Để xét sự tồn tại của luồng như vậy có thể sử dụng thuật toán tìm luồngcựcđại từ s đến t trong mạng G = (V,E) 2.3 Về mộtbàitoán tối ưu rời rạc GV: Trương Nữ Thùy Duyên Trường THPT Chuyên Quảng Bình Trong mục này ta sẽ trình bày thuật toán được xây dựng... sinh viên i phải tham gia đúng pi nhóm, hãy tìm cách phân phối với số người trong nhóm có nhiều sinh viên tham gia nhất là nhỏ nhất có thể được Đưa vào biến số xij =1, nếu sinh viên i tham gia vào nhóm j, xij =0, nếu ngược lại, i=1,2,…,m, j= 1,2,…,n, khi đó dễ thấy mô hình toán học cho bàitoán đặt ra chính là bàitoán (1)-(3): Xét bàitoán tối ưu rời rạc f ( x1 , x 2 , , x n ) = max n ∑ xij 1≤i ≤m j... (1)-(3) là mô hình toán học cho nhiều bàitoán tối ưu tổ hợp thực tế Dưới đây ta dẫn ra một vài ví dụ điển hình 2.3.1 Bàitoán phân nhóm sinh hoạt Có m sinh viên và n nhóm sinh hoạt chuyên đề Với mỗi sinh viên i, biết aij =1, nếu sinh viên có i nguyện vọng tham gia vào nhóm j, aij =0, nếu ngược lại, và pi là sốlượng nhóm chuyên đề mà họ có nguyện vọng tham gia và đảm bảo mỗi sinh viên i phải tham gia... vùng quê là một trường hợp riêng của bàitoán về cặp ghép trên đồ thị hai phía mà để giải nó có thể xây dựng thuật toán hiệu quả hơn 2.2 Bàitoán về hệ thống đại diện chung Cho tập m phần tử X = {z1,z2,…,zm} Giả sử và là hai dãy tập con của X Dãy gồm n phần tử khác nhau của X:< a 1,a2,…,an > được gọi là hệ thống các đại diện chung của hai dãy đã cho nếu như tìm được một hoán... Bình i=1,2,…,m; j=1,2,…,n Hãy bố trí các phòng họp sao cho hội nghị kết thúc sau ít ngày làm việc nhất Đưa vào biến số xij = 1, nếu bố trí tiểu ban i làm việc ở phòng j, xij =0, nếu ngược lại, i=1,2,…,m,j=1,2,…,n, khi đó dễ thấy mô hình toán học cho bàitoán đặt ra chính là bàitoán (1)-(3): Xét bàitoán tối ưu rời rạc f ( x1 , x 2 , , x n ) = max n ∑ xij 1≤i ≤m j =1 → min (1) với điều kiện n a ∑ ij xij... tăng luồng: 2 5 1 4 2 6 2 5 2 3 3 9 3 5 2 4 6 5 Đến đây không còn đường đi cơ bản nào trên đồ thị tăng luồng nên kết thúc bước 2 Bước 3: Luồngcựcđại fmax =14 Lát cắt cực tiểu (X,Y) với X= {1,2,3,5}, Y={4,6} 2 5(5) 7(7) 8(2) 5(2) 7(4) 1 3 5(5) 4 GV: Trương Nữ Thùy Duyên 5 9(9) 7(5) 6 Trường THPT Chuyên Quảng Bình Sơ đồ thuật toán Ford-Fullkerson tổng quát Begin Mạng với luồng zero Stop:= False Tăng luồng . luồng cực đại End Trường THPT Chuyên Quảng Bình II. MỘT SỐ BÀI TOÁN TỐI ƯU TỔ HỢP ỨNG DỤNG TỪ BÀI TOÁN LUỒNG Bài toán luồng cực đại có rất nhiều ứng dụng trong việc giải nhiều bài toán tổ hợp ĐẦU Bài toán luồng cực đại trong mạng là một trong số những bài toán tối ưu trên đồ thị có những ứng dụng rộng rãi trong thực tế cũng như những ứng dụng thú vị trong lý thuyết tổ hợp. Bài toán. trình bày thuật toán được xây dựng dựa trên thuật toán tìm luồng cực đại để giải một bài toán tối ưu rời rạc là mô hình toán học cho một số bài toán tối ưu tổ hợp. Xét bài toán tối ưu rời