Luồng cực đại và một số bài toán ứng dụng

21 1.5K 3
Luồng cực đại và một số bài toán ứng dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trường THPT Chuyên Quảng Bình PHẦN I: PHẦN MỞ ĐẦ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 được đề xuất vào đầu những năm 1950, gắn liền với tên tuổi của hai nhà bác học Mỹ là Ford Fulkerson. Bài toán luồng cực đại trong mạng có nhiều ứng dụng trong thực tế như: Bài toá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ài toá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, ứng dụng của bài toán còn để giải các bài toán như: Bài toán đám cưới vùng quê, bài toán về hệ thống đại diện chung, bài toán phân nhóm sinh hoạt, bài toá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ồng cực đại một số bài toán ứng dụng” sử dụng thuật toán của Ford Fulkerson để giải bài toá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ÀI TOÁ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 mỗi cung e = (v,w) E được gán với một số 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ột số 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ài toán luồng cự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ồng cực đại trong mạng. Bài toán như vậy có thể xuất hiện trong rất nhiều ứng dụ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ài toán luồng cực đại xẽ chỉ cho ta các đoạn đường đông xe nhất 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ồng cự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ồng cực đại- thuật toán Ford-Fulkerson: • Khởi tạo một luồ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ồng cự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ồng cực đại 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ồng cực đại Luồng cự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ồng cự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ồng cự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 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 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ồng cực đại 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ài toán luồng cực đại thuật toán Ford – Fulkerson Đề tài cũng đưa ra được một số bài toán ứng dụng cụ thể của bài toán luồng cực đại Hy vọng chúng ta có thể hiểu thêm thuật toán tìm luồng cực đại áp dụng để giải được các bài toán đã đặt ra Đề tài có một số hạn chế như sau: - - Chưa trình bày được một thuật toán tìm luồng cực đại khác như Thuật toán Edmonds-Karp để so sánh đối chiếu... với luồng cực đại End GV: Trương Nữ Thùy Duyên 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 Khó khăn chính ở đây là phải xây dựng tương ứng sao cho việc tìm luồng cực đại trong nó sẽ tương đương với việc giải bài toán đặt ra Mục này sẽ giới thiệu một số bài toán như vậy 2.1 Bài. .. Bắt đầu từ luồng 0, ta tìm luồng cự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ồng cực đại trong đồ thị có giá trị Vmax = m, thì bài toán có lời giải, 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ài toán có lời giải thì Vmax=m bài toán về các... 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 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ài toá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 tồn tại khi 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ồng cực đại từ s đến t trong mạng G = (V,E) 2.3 Về một bài toá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ài toán đặt ra chính là bài toán (1)-(3): Xét bài toá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ài toá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ài toán phân nhóm sinh hoạt Có m sinh viên 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, pi là số lượng nhóm chuyên đề mà họ có nguyện vọng tham gia đả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ài toá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ài toán về hệ thống đại diện chung Cho tập m phần tử X = {z1,z2,…,zm} Giả sử 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ài toán đặt ra chính là bài toán (1)-(3): Xét bài toá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ồng cự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 đồ 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

Ngày đăng: 26/06/2014, 08:56

Từ khóa liên quan

Mục lục

  • PHẦN I: PHẦN MỞ ĐẦU

  • PHẦN II: NỘI DUNG

    • I. PHÁT BIỂU BÀI TOÁN

      • 1.1 Mạng, Luồng trong mạng

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

      • 1.3 Thuật toán Ford-Fulkerson

    • II. MỘT SỐ BÀI TOÁN TỐI ƯU TỔ HỢP ỨNG DỤNG TỪ BÀI TOÁN LUỒNG

      •  

      • 2.1 Bài toán đám cưới vùng quê

      • 2.2. Bài toán về hệ thống đại diện chung

      • 2.3. Về một bài toán tối ưu rời rạc.

  • PHẦN III: KẾT LUẬN

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan