1. Trang chủ
  2. » Giáo án - Bài giảng

Tiểu luận môn phân tích và đánh giá thuật toán bài toán luồng cực đại thuật toán ford fulkerson

20 439 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 492,58 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CHƯƠNG I: LUỒNG CỰC ĐẠIBà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ị tìm được ứng dụng rộng rãi trong thực tế cũng như những ứng dụng trong lý thuyế

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

_ & _

BÀI TẬP LỚN

MÔN HỌC: PHÂN TÍCH VÀ ĐÁNH GIÁ THUẬT TOÁN

ĐỀ SỐ 2:

BÀI TOÁN LUỒNG CỰC ĐẠI THUẬT TOÁN FORD – FULKERSON

KIỂM TRA TÍNH ĐÚNG ĐẮN VÀ ĐÁNH GIÁ HIỆU QUẢ

Giảng viên hướng dẫn : TS Tống Minh Đức

Học viên : Nguyễn Tiến Thụy Lớp : Cao học HTTT- K27B

Hà Nội, 2016

MỤC LỤC

Trang 2

CHƯƠNG I: LUỒNG CỰC ĐẠI 3

I Mạng 3

II Luồng trên mạng 3

III Tính chất của luồng 3

IV Giá trị của luồng 4

V Ứng dụng thực tế 4

VI Một số thuật toán về luồng cực đại 5

V.1 Bài toán luồng cực đại trên mạng 5

V.1.1 Lát cắt - Đường tăng luồng 5

V.1.2 Thuật toán Ford-Fulkerson 7

V.2 Thuật toán song song tìm luồng cực đại 10

V.2.1 Bài toán tìm luồng cực đại trên mạng 10

V.2.2 Ý tưởng thuật toán 10

V.2.3 Xây dựng thuật toán song song 10

CHƯƠNG 2: BÀI TOÁN ỨNG DỤNG 11

I Ứng dụng thuật toán Ford-Fulkerson giải bài toán luồng cực đại 11

II Chương trình ứng dụng 13

II.1 Dữ liệu đầu vào 13

II.2 Dữ liệu đầu ra 14

II.3 Mô tả dữ liệu 14

II.4 Một số hàm chính của chương trình 15

II.4.1 Thuật toán Ford-Fulkerson – Tìm đường tăng luồng 15

II.4.2 Hàm kiểm tra có tồn tại luồng cần tìm hay không 16

II.4.3 Hàm in ra ma trận: 16

II.4.4 Hàm thêm một đỉnh vào hàng đợi: 16

II.4.5 Hàm xóa một đỉnh khỏi hàng đợi: 17

II.4.6 Hàm kiểm tra giá trị lớn hơn: 17

II.4.7 Giao diện debug chương trình: 17

Trang 3

CHƯƠNG I: LUỒNG CỰC ĐẠI

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ị tìm được ứng dụng rộng rãi trong thực tế cũng như những ứng dụng trong lý thuyết tổ hợp Bài toá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

I Mạng

Định nghĩa: 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à đỉnh phát

- Có duy nhất một đỉnh t không có cung đi ra gọi là đỉnh 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.

Quy ước nếu mạng không có cung (v,w) thì ta thêm vào cung (v,w) với khả năng thông qua c[v,w] được gán bằng 0.

Với một mạng G = (V, E, c), ta ký hiệu:

W - (x) = {(v,w) ∈ E | v ∈ V}: tập các cung đi vào đỉnh v.

W + (x) = {(w,v) ∈ E | v ∈ V}: tập các cung đi ra khỏi đỉnh v.

II Luồng trên mạng

Định nghĩa: 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:

Điều kiện 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)

Điều kiện 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: t(W-(x)) = t(W+(x)), ∀x ≠ s, t

III Tính chất của luồng

Với tập B ⊆ V, ký hiệu:

W-(B) = { (a, b)∈ E | a∉B, b∈B } - tập cung đi vào B

W+(B) = { (a, b)∈ E | a∈B, b∉B } - tập cung đi ra từ B

Trang 4

Khi đó nếu tập con các đỉnh B không chứa s và t thì: t (W-(B)) = t (W+(B)) Theo tính chất b) của luồng: ∑ t (W-(x)) =∑ t (W+(x))

Cạnh kề với đỉnh x nếu có đỉnh đầu và đỉnh cuối đều nằm trong tập B thì nó

sẽ có mặt ở cả hai vế của đẳng thức đúng một lần, do đó có thể giản ước

IV Giá trị của luồng

Giá trị của một luồng được tính bằng tổng giá trị trên các cung đi ra từ đỉnh

nguồn s (đỉnh 1 Hình 1), hoặc tổng giá trị trên các cung đi vào đỉnh thứ t (đỉnh 6

Hình 1)

Hình 1: Luồng cực đại với giá trị luồng và khả năng thông qua của từng cặp cạnh.

V Ứng dụng thực tế

- Xét đồ thị tương ứng hệ thống ống dẫn dầu Trong đó các ống tương ứng với các cung, điểm phát là tàu chở dầu, điểm thu là bể chứa, các điểm nối của ống là các nút của đồ thị Khả năng thông qua của các cung tương ứng

là tiết diện các ống Cần phải 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

- 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

- Bài toán cặp ghép: có m chàng trai và n cô gái Mỗi chàng trai

ưa thích một số cô gái Hãy tìm cách ghép cặp sao cho số cặp ghép được là nhiều nhất

Trang 5

VI Một số thuật toán về luồng cực đại

V.1 Bài toán luồng cực đại trên mạng

V.1.1 Lát cắt - Đường tăng luồng

a) Lát cắt

Định nghĩa Ta gọi lát cắt (X,X*) là một cách phân

hoạch tập đỉnh V của mạng ra thành hai tập X và X*=V \ X,

trong đó s ∈ X và t ∈ X* Khả năng thông qua của lát cắt

(X,X*) là số.

Lát cắt với khả năng thông qua nhỏ nhất được gọi là lát cắt hẹp nhất

Bổ đề 1 Giá trị của mọi luồng f trong mạng luôn nhỏ hơn

hoặc bằng khả năng thông qua lát cắt (X,X*) bất kỳ trong nó: val(f) ≤ c(X,X*)

Hệ quả 1 Giá trị luồng cực đại trong mạng không vượt

quá khả năng thông qua của lát cắt hẹp nhất trong mạng

Giả sử f là một luồng trong mạng G = (V,E) Từ mạng G =

(V,E) ta xây dựng đồ thị có trọng số Gf =(V,Ef), với tập cung Ef

và trọng số trên các cung được xác định theo quy tắc sau:

 Nếu e = (v,w) ∈ E với f(v,w) = 0, thì (v,w)∈ Ef với trọng số c(v,w);

Nếu e = (v,w) ∈ E với f(v,w) = c(v,w), thì (w,v)∈ Ef với trọng số f(v,w);

Nếu e = (v,w) ∈ E với 0 < f(v,w) < c(v,w), thì (v,w)∈ Ef

với trọng số c(v,w) - f(v,w) và (w,v) ∈ Ef với trọng số f(v,w)

Các cung của Gf đồng thời cũng là cung của G được gọi là

cung thuận, các cung còn lại gọi là cung nghịch Đồ thị Gf

được gọi là đồ thị tăng luồng

Ví dụ: Đồ thị tăng luồng được xây dựng từ đồ thị G ở hình 1

Trang 6

Hình 2 Mạng G và luồng f Đồ thị có trọng số G f tương ứng

b)Đường tăng luồng

Giả sử P = (s = v0,v1,v2,…,vk= t) là một đường đi từ s đến t

trên đồ thị tăng luồng Gf Gọi d là giá trị nhỏ nhất của các trọng số của các cung trên đường đi P Xây dựng luồng f' trên mạng G theo quy tắc sau:

f(u,v)

=

f(u,v) + d, nếu (u,v) ∈ P là cung thuận f(u,v) – d, nếu (u,v) ∈ P là cung

nghịch f(u,v), nếu (u,v)  P

Hình 2: Đường tăng luồng

Dễ dàng kiểm tra được rằng f' được xây dựng như trên là luồng trong mạng và val(f')= val(f) + d Thủ tục biến đổi luồng vừa nêu là tăng luồng dọc theo đường P

Trang 7

Hình 3: Luồng trước và sau khi được tăng Đường tăng luồng P = (1,3,4,2,5,6), có giá trị trong số nhỏ nhất trên đường d=2 [1,3] là cung thuận, val(f) = 2 + 2 = 4, [3,4] là cung thuận, val(f) = 1 + 2 = 3 [4,2] là cung nghịch , val(f) = 5 – 2 = 3, [2,5] là cung thuận, val(f) = 0 + 2 = 2 [5,6] là cung thuận, val(f) = 1 + 2 = 3

Sau biến đổi ta có luồng mới mang giá trị 9 val(f) = 4 + 3 - 3 + 2 + 3 = 9

V.1.2 Thuật toán Ford-Fulkerson

+ Xuất phát từ một luồng chấp nhận được f.

+ Tìm một đường đi tăng luồng P Nếu không có thì thuật toán kết thúc Nếu có, tiếp bước 3 dưới đây.

+ Nếu (P) = + thuật toán kết thúc.

Trong đó (P) - Lượng luồng tăng thêm, hay nói khác là làm sự tăng luồng (flow augmentation) dọc theo đường đi tăng luồng P một lượng thích hợp

mà các ràng buộc của bài toán vẫn thoả mãn

Cách tìm đường đi tăng luồng Ta sử dụng thuật toán gán nhãn có nội

dung như sau Một đường đi P thoả mãn về đường đi tăng luồng, nhưng chỉ đi từ

s đến u nào đó (chưa tới t) sẽ được gọi là đường đi chưa bão hoà.

Đỉnh u được gán nhãn, nếu ta biết có một đường đi chưa bão hoà từ s tới

u Tiếp theo xét tất cả các đỉnh v liền kề với đỉnh u, kiểm tra xem chúng có thể

được gán nhãn hay không

Nếu (u,v) có luồng trên cung f(u,v) < c(u,v) thì ta có thể nối thêm cung

(u,v) và đường đi chưa bão hoà P từ s đến u để được đường đi chưa bão hoà tới

v Vậy v có thể gán nhãn.

Bước lặp tăng luồng (Ford - Fulkerson): Tìm đường tăng luồng P đối với

luồng hiện có Tăng luồng dọc theo đường P

Khi đã có luồng cực đại, lát cắt hẹp nhất có thể xác định được

Trang 8

Thuật toán Ford – Fulkerson được mô tả trong thủ tục sau:

Procedure Max_Flow;

* Thuật toán Ford – Fulkerson *

begin

(* Khởi tạo: Bắt đầu từ luồng với giá trị 0 *)

for u  V do for v  V do f(u,v):=0;

Stop:=false;

While not Stop do

if< Tìm được đường tăng luồng P> then <Tăng luồng dọc theo P>

else Stop:= true;

end;

* Thuật toán gán nhãn (The labeling algorithm)

Gọi V T là tập mọi đỉnh đã gán nhãn nhưng chưa được thăm Ta có thuật toán để tìm đường đi tăng luồng

Xuất phát với V T = {s} và s là đỉnh bắt đầu ( đỉnh đánh dấu đầu tiên) Một bước lặp sẽ có V T hiện hành và gồm ba bước như sau:

+ Nếu t  V T hoặc V T = , thuật toán kết thúc Ngược lại thì chọn một

đỉnh u  V T để thăm và đưa nó ra khỏi V T Xét tất cả các đỉnh cạnh u, tức là xét

mọi cung có dạng (u,v) và (v,u).

+ Nếu (u,v)  E, f(u,v) < c(u,v) và v chưa gán nhãn thì gán nhãn nó và đưa v vào tập V T

+ Nếu (v,u)  E, f(v,u) > 0 và v chưa gán nhãn thì gán nhãn nó và đưa

vào tập V T

Trang 9

Sơ đồ thuật toán Ford-Fulkerson tổng quát

Định lý 2 (Định lý về luồng cực đại trong mạng và lát cắt hẹp nhất).

Luồng cực đại trong mạng bằng khả năng thông qua của lát cắt hẹp nhất

Định lý 3 (Định lý về tính nguyên) Nếu tất cả các khả năng thông qua

là các số nguyên thì luôn tìm được luồng cực đại với luồng trên các cung là các

số nguyên.

False

True

False

True

Begin

Mạng với luồng zero

Stop:= False

Tăng luồng

Stop:= False

Mạng với luồng

cực đại

End

Trang 10

V.2 Thuật toán song song tìm luồng cực đại

Hiện nay, mô hình xử lý song song đã và đang phát triển mạnh mẽ giải quyết những vấn đề bế tắc mà mô hình xử lý tuần tự gặp phải như vấn đề thời gian thực hiện chương trình, tốc độ xử lý, khả năng lưu trữ của bộ nhớ, xử lý dữ liệu với quy mô lớn

Trong bối cảnh đó, thuật toán tìm luồng cực đại cần được phát triển theo hướng song song nhằm phát huy sức mạnh của bài toán

V.2.1 Bài toán tìm luồng cực đại trên mạng

Cho mạng G(V,E,C), nguồn a, đích z Trong số các luồng trên mạng G, hãy tìm luồng có giá trị lớn nhất

V.2.2 Ý tưởng thuật toán

Dựa trên thuật toán truyền thống và thuật toán hoán chuyển nguồn đích, xây dựng thuật toán song song tìm luồng cực đại Ý tưởng của phương pháp này

là thay vì trong thuật toán truyền thống dùng một bộ vi xử lý thực hiện công việc tuần tự từ đỉnh nguồn đến đỉnh đích Trong thuật toán song song sử dụng hai bộ

vi xử lý thực hiện công việc song song, vi xử lý 1 xuất phát từ đỉnh nguồn, vi xử

lý 2 xuất phát từ đỉnh đích Hai vi xử lý trong quá trình tìm đường tăng luồng sẽ gặp nhau ở đỉnh trung gian t nào đó, công việc tiếp theo vi xử lý 1 xử lý công việc từ đỉnh t đến nút nguồn, vi xử lý 2 xử lý công việc từ đỉnh t đến nút đích

V.2.3 Xây dựng thuật toán song song

 Đầu vào: Mạng G=(V , E) với nguồn a, đích z, khả năng thông qua:

 ij ,  , 

Các đỉnh trong G được sắp xếp theo thứ tự nào đó

 Đầu ra: Luồng cực đại F=(f ij), (i , j)∈G

 Các bước

Bước1: Khởi tạo

Bước 2: Sinh nhãn

Bước 3: Hiệu chỉnh tăng luồng, xóa nhãn

Đây là thuật toán song song tổng quát, có thể áp dụng hiệu quả cho các loại mạng Nếu thuật toán được cài đặt trong môi trường xử lý song song tối ưu,

dự kiến thời gian tính toán sẽ giảm đi một nửa so với thuật toán truyền thống

Trang 11

CHƯƠNG 2: BÀI TOÁN ỨNG DỤNG

I Ứng dụng thuật toán Ford-Fulkerson giải bài toán luồng cực đại

Bài toán thực tế:

Dầu được bơm từ tàu chở dầu (đỉnh s) qua các trạm trung chuyển (các đỉnh b, c, d, e) tới bể chứa (đỉnh t) Các cung có hướng của đồ thị biểu diễn các đường ống dẫn và cho biết hướng của luồng dầu trong ống Các số trên cung là các khả năng thông qua (có thể hiểu là thiết diện) của các ống dẫn dầu tương ứng Cần xác định luồng dầu lớn nhất có thể bơm từ tàu chở dầu vào bể chứa bằng cách nào (lượng dầu bơm qua từng trạm theo các đường ống đã cho)?

Áp dụng thuật toán Ford-Fulkerson tìm luồng cực đại bằng cách gán nhãn cho đỉnh của mạng G với luồng f được cho như Hình 3, hai số viết bên cạnh mỗi cung là khả năng thông qua và luồng của các cung Kết quả các bước của thuật toán mô tả bởi các đồ thị và bảng dưới đây Mạng với luồng cực đại thu được ở Hình 4 Lát cắt bé nhất là X = {s,c}, X* = {b,d,e,t} và giá trị luồng cực đại là 9

Hình 3

+ Bước lặp 1: s  b  d  t, 1 = 1

3,0 3,1

t

d b

5,2

1,1

6,1

6,5 6,4

5,4

s

3,0 3,1

t(d+,1)

d(b+,1) b(s+,1)

5,2

1,1

6,1

6,5 6,4

5,4

s (s,)

d b

3,0 3,1

t

5,2

1,1

6,1

6,6 6,5

5,5

s

Trang 12

+ Bước lặp 3: Không còn đường tăng luồng, Val(f max ) = 5+4 = 9

Hình 4 Mạng G với luồng cực đại và lát cắt hẹp nhất

Độ phức tạp của thuật toán:

Nếu các khả năng thông qua là các số rất lớn thì giá trị luồng cực đại cũng

có thể là rất lớn và khi đó thuật toán mô tả ở trên sẽ đòi hỏi rất nhiều bước tăng luồng Ví dụ trong hình 5 sẽ minh hoạ cho điều này Hình 5(a) mô tả mạng cần xét với khả năng thông qua trên các cung Hình 5(b) mô tả luồng trên các cung (số thứ hai bên cạnh cung) sau khi thực hiện tăng luồng dọc theo đường tăng luồng (s,a,b,t) Hình 5(c) mô tả luồng trên các cung sau khi thực hiện tăng luồng dọc theo đường tăng luồng (s,b,a,t) Rõ ràng, sau 2.106 lần tăng luồng theo đường (s,b,a,t) và (s,b,a,t) một cách luân phiên ta thu được luồng cực đại

Start

getData

Client

1

Connect

Init()

Waiting

St

op

Server

Connect

getNetworks

getData

Exit

getStep

Step

=2

Step

=3

Assign _label

Inc_flow Del_label

getData

Client 1 Connect

Init()

Waiting

St op

getDat a

End

CheckSteped

Step

ed

=2

Display _Maxflow

if(c1ed1=3&c2ed=3 ) then c1ed=1, c2ed=1, Step=2, Danh thuc C1, C2

If(c1ed1=2|c2ed=2) then c1ed=2, c2ed=2, Step=3, Danh thuc C1, C2 tang luong, xoa nhan

Step ed=1

=2

If(c1ed=1&c2ed=

1) then Step=2;

Danh thuc C1, C2 sinh nhan

St op

getData

Exit

getStep

Step

=2

Step

=3

Assign _label

Inc_flow Del_label

Step

ed

=3

T

F

T

T

T

F

F T

T

T

F

F

F

T

T

T

F

F

3,0 3,1

t(e+,2)

d(c+,2) b(d-,2)

5,2

1,1

6,1

6,6 6,5

5,5

s (-,)

d b

3,2 3,3

t

5,4

1,1

6,3

6,6 6,3

5,5

s

d b

3,2 3,3

t

5,4

1,1

6,3

6,6 6,3

5,5

s

Trang 13

Hình 5: Ví dụ tồi tệ với thuật toán Ford- Fulkerson

Hơn thế nữa nếu các khả năng thông qua là các số vô tỷ, người ta còn xây dựng được ví dụ để cho thuật toán không dừng, và tệ hơn là dãy các giá trị luồng xây dựng theo thuật toán hội tụ thì nó còn không hội tụ đến giá trị luồng cực đại Như vậy, muốn thuật toán làm việc hiệu quả, việc lựa chọn đường tăng luồng cần được tiến hành hết sức cẩn thận

Edmonds và Karp chỉ ra rằng nếu đường tăng luồng được chọn là đường

ngắn nhất từ s đến t trên đồ thị G f Điều đó có thể thực hiện, nếu trong thủ tục tìm đường tăng Find_Path mô tả ở trên, danh sách VT được tổ chức dưới dạng QUEUE (nghĩa là ta thực hiện tìm đường tăng bởi thủ tục tìm kiếm theo chiều

rộng) thì thuật toán sẽ kết thúc sau không quá mn/2 lần sử dụng đường tăng

luồng Nếu để ý rằng, tìm kiếm theo chiều rộng trên đồ thị đòi hỏi thời gian

O(n+m), thì thuật toán thu được sẽ có độ phức tạp tính toán là O(nm 2 ).

II Chương trình ứng dụng

II.1 Dữ liệu đầu vào

Input: file văn bản “mf1.in”, “mf2.in”, “mf3.in” tương ứng với kích thước của mạng có kích thước:

- Mạng có 6 đỉnh , 8 cạnh

- Mạng có 7 đỉnh, 11 cạnh

- Mạng có 101 đỉnh, 200 cạnh

Cấu trúc file dữ liệu đầu vào:

Waiting

If(c1ed=4|

c2ed=4)then c1ed=4, c2ed=4, Step=4;

Thong bao dung C1, C2

Waiting

F

s

t

106 106

1

b a

(a)

s

t

106,0 106,1

1,1

b a

(b)

s

t

106,1 106,1

106,1

106,1 1,0

b a

(c)

Trang 14

- Dòng 1: Chứa 2 số nguyên tương ứng với số đỉnh (n) và số cạnh của mạng (e)

- Đỉnh phát s mặc định là đỉnh đầu (đỉnh 0) và đỉnh thu t mặc định là đỉnh cuối (n-1)

- Các dòng tiếp theo: Mỗi dòng chứa 3 số nguyên tương ứng với đỉnh đầu, đỉnh cuối và khả năng thông qua cạnh đó

Dữ liệu biểu diễn ma trận trọng số của đồ thị có hướng, minh hoạ cho mạng cần tìm luồng cực đại

II.2 Dữ liệu đầu ra

Output: Dữ liệu đầu ra thể hiện trên màn hình command với ma trận đầu vào và giá trị luồng cực đại trong mạng

II.3 Mô tả dữ liệu

Mô tả dữ liệu

mf1.in

6 8

0 1 5

0 2 5

1 3 6

1 4 3

2 3 3

2 4 1

3 5 6

4 5 6

mf2.in

7 11

0 1 6

0 2 4

0 3 7

1 5 7

2 1 5

2 3 5

2 5 3

3 5 9

4 2 4

4 6 4

5 6 12

4 5 6

3 3

t

5

3 1

5

1

6

6

6 5

s

0

2

4

5

3 1

s

0

t 6 4

7 7

4

9 6

6

5

6

12 6

Ngày đăng: 03/10/2017, 13:26

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w