1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng chương trình mô phỏng bài toán luồng cực đại trong mạng

66 583 0

Đ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 66
Dung lượng 2,96 MB

Nội dung

Có rất nhiều bài toán ứng dụng của lý thuyết đồ thị được áp dụng rộng rãi trong thực tế như: Bài toán cây khung nhỏ nhất, bài toán tìm đường đi ngắn nhất, bài toán luồng cực đại trong mạ

Trang 1

MỤC LỤC

LỜI NÓI ĐẦU 3

CHƯƠNG 1 5

1.1 Các định nghĩa 5

1.2.Các thuật ngữ cơ bản 9

1.2.1.Các thuật ngữ mô tả các đỉnh và cạnh của đồ thị vô hướng 9

1.2.2.Các thuật ngữ mô tả đồ thị có hướng 10

1.3 Đường đi, chu trình, đồ thị liên thông 11

1.3.1 Đường đi, chu trình 11

1.3.2 Đồ thị liên thông 12

1.4 Các dạng biểu diễn đồ thị 15

1.4.1 Biểu diễn hình học của đồ thị 15

1.4.2 Sự đẳng cấu 15

1.4.3 Biểu diễn đồ thị trên máy tính 16

CHƯƠNG 2 22

BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG 22

2.1 Mạng, Luồng trong mạng 22

2.2 Lát cắt, đường tăng luồng 23

2.3 Bài toán luồng cực đại trong mạng 27

2.3.1.Giới thiệu bài toán luồng cực đại trong mạng 27

2.3.2.Nội dung bài toán 27

2.4 Thuật toán tìm luồng cực đại trong mạng 27

2.4.1.Tư tưởng thuật toán 27

2.4.2.Sơ đồ thuật toán ford_ Fulkersol 29

Trang 2

CHƯƠNG 3 38

CÀI ĐẶT MÔ PHỎNG BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG 38

3.1 Khái quát về ngôn ngữ lập trình C# 38

3.1.1 Những thế mạnh của ngôn ngữ C# 39

3.1.2 Các bước chuẩn bị cho chương trình 41

3.2 Thuật toán tìm luồng cực đại trong mạng 42

3.3 Các phương thức chính của chương trình 45

3.4 Kết quả 48

CHƯƠNG 4 50

MỘT SỐ BÀI TOÁN ỨNG DỤNG 50

4.1.Một số bài toán luồng tổng quát 50

4.1.1 Mạng với nhiều điểm phát và điểm thu 50

4.1.2 Bài toán với khả năng thông qua của các cung và đỉnh 52

4.1.3.Mạng trong đó khả năng thông qua của mỗi cung bị chặn hai phía 53

4.2 Một số bài toán ứng dụng trong tổ hợp 54

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

4.2.2 Bài toán về hệ thống đại diện chung 54

4.2.3 Bài toán tối ưu rời rạc 56

KẾT LUẬN 64

TÀI LIỆU THAM KHẢO 66 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Error! Bookmark not defined

Trang 3

LỜI NÓI ĐẦU

Trong những năm gần đây các nghành khoa học và công nghệ, nhất là công nghệ thông tin đang phát triển một cách chóng mặt với nhiều loại hình dịch

vụ phong phú đáp ứng ngày càng cao nhu cầu của con người Các hệ thống viễn thông hiện đại, các máy tính cá nhân, các mạng máy tính quốc gia, quốc tế và internet… đã làm cho các quốc gia và các cá nhân trên thế giới xích lại gần nhau hơn

Thông tin là một nhu cầu không thể thiếu đối với con người và là một

dạng tài nguyên đặc biệt vô cùng quý giá Nói đến thông tin cũng đồng thời nói đến việc lưu trữ và xử lý thông tin trên máy tính Trong lưu trữ và xử lý thông tin

trên máy tính thì toán rời rạc đóng góp một tầm quan trọng không nhỏ, bởi vì

bản chất của việc lưu trữ và xử lý thông tin trên máy tính là các quá trình rời rạc

Lý thuyết đồ thị là một trong những lĩnh vực nghiên cứu của toán rời rạc,

có nhiều ứng dụng rộng rãi trong nhiều lĩnh vực của khoa học kỹ thuật và đời sống nhất, nhất là lĩnh vực khoa học máy tính Có rất nhiều bài toán ứng dụng của lý thuyết đồ thị được áp dụng rộng rãi trong thực tế như: Bài toán cây khung nhỏ nhất, bài toán tìm đường đi ngắn nhất, bài toán luồng cực đại trong mạng,…

Bài toán luồng cực đại trong mạng là một trong những bài toán tối ưu

trên đồ thị tìm được những ứng dụng rộng rãi trong thực tế, có rất nhiều bài toán trong thực tế có thể đưa về bài toán luồng cực đại trong mạng để giải như bài toán mạng với nhiều điểm phát và điểm thu, bài toán đường ống dẫn dầu, bài toán tìm 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 trong mạng cũng tìm được nhiều ứng dụng thú

vị trong lý thuyết tổ hợp, một số bài toán tổ hợp 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 lập lịch cho hội nghị,…có thể giải bằng cách xây dựng mạng đồ thị tương ứng, khi đó việc tìm luồng cực đại trong mạng đó sẽ tương ứng với việc giải bài toán tổ hợp đặt ra

Trang 4

trong mạng cũng như những ứng dụng của bài toán trong thực tế cũng như trong

lý thuyết tổ hợp

Nội dung của đề tài sẽ được trình bày trong 4 chương

Chương 1: Lý thuyết đồ thị

Chương 2: Bài toán luồng cực đại trong mạng

Chương 3: Cài đặt mô phỏng bài toán luồng cực đại trong mạng

Chương 4: Một số bài toán ứng dụng

Trang 5

CHƯƠNG 1

LÝ THUYẾT ĐỒ THỊ 1.1 Các định nghĩa

Định nghĩa 1: (Định nghĩa về đồ thị)

Đồ thị là cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối các đỉnh này

Người ta phân biệt các loại đồ thị khác nhau bởi kiểu và số lượng cạnh nối hai đỉnh nào đó của đồ thị

Giả sử V là tập hữu hạn, không rỗng các phần tử nào đó và EV× V Bộ

G = (V,E) được gọi là đồ thị hữu hạn Mỗi phần tử xV gọi là một đỉnh và mỗi phần tử e=(x, y)E gọi là một cạnh của đồ thị G=(V,E)

Xét một cạnh e khi đó tồn tại 2 đỉnh x, yV sao cho e =(x,y), ta nói rằng x nối với y hoặc x và y thuộc e

- Nếu cạnh e = (x,y) mà x và y là hai đỉnh phân biệt thì ta nói x,y là hai đỉnh kề nhau

- Nếu e=(x,x) thì e là cạnh có hai đỉnh trùng nhau ta gọi đó là một khuyên

- Nếu e=(x,y) mà x,y là cặp đỉnh có phân biệt thứ tự hay có hướng từ x đến y thì e là một cung, khi đó x là gốc còn y là ngọn hoặc x là đỉnh ra, y là đỉnh vào

- Khi giữa cặp đỉnh (x,y) có nhiều hơn một cạnh thì ta nói những cạnh cùng cặp đỉnh là những cạnh song song hay là cạnh bội Minh hoạ bằng các hình

vẽ sau:

Trang 6

Trong thực tế ta có thể gặp nhiều vấn đề mà có thể dùng mô hình đồ thị để biểu diễn, như sơ đồ một mạng máy tính, sơ đồ mạng lưới giao thông, sơ đồ thi công một công trình

Ví dụ: Sử dụng đơn đồ thị vô hướng để mô tả một mạng máy tính như sau: Giả sử ta có một mạng gồm các máy tính và các kênh điện thoại nối các máy tính này, chúng ta có thể biểu diễn các vị trí đặt máy tính bởi các điểm và các kênh điện thoại nối chúng bởi các đoạn thẳng nối như hình 1 dưới đây:

Ta thấy trong mạng ở hình 1, giữa hai máy bất kỳ chỉ có nhiều nhất một kênh điện thoại nối chúng, kênh này cho phép liên lạc cả hai chiều và không có máy tính nào lại được nối với chính nó Sơ đồ mạng máy tính cho trong hình 1 được gọi là đơn đồ thi vô hướng

Vậy ta có định nghĩa sau:

Định nghĩa 2: (Định nghĩa đơn đồ thị vô hướng)

Đơn đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh và E là tập các

cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh

Ví dụ: Sơ đồ mạng cho trong hình 1 ở trên là đơn đồ thị vô hướng

Trong trường hợp giữa hai máy tính nào đó thường xuyên phải truyền tải nhiều thông tin người ta phải nối hai máy này với nhiều kênh thoại Mạng với đa kênh thoại giữa các máy được cho trong hình 2 dưới đây

Trang 7

Sơ đồ biểu diễn mạng như trên được gọi là đa đồ thị vô hướng Như vậy ta

có định nghĩa sau:

Định nghĩa 3( Định nghĩa đa đồ thị vô hướng)

Đa đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh và E là họ các

cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh Hai cạnh

e1và e2 gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh

Ví dụ: đa đồ thị vô hướng như hình 2 ở trên

Nhận xét: Mỗi đơn đồ thị đều là đa đồ thị nhưng điều ngược lại không

đúng

Trong mạng máy tính có thể có những kênh thoại nối một máy nào đó với chính nó Trong những trường hợp mạng như vậy thì ta sử dụng khái niệm giả đồ thị vô hướng được định nghĩa như sau:

Định nghĩa 4 (Định nghĩa giả đồ thị vô hướng)

Giả đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh và E là họ các

cặp không có thứ tự gồm hai phần tử ( không nhất thiết phải khác nhau) của V gọi là các cạnh Cạnh e được gọi là khuyên ( cạnh nối một đỉnh với chính nó) nếu

nó có dạng e= (u, u)

Ví dụ: Sơ đồ hình 3 dưới đây là giả đồ thị với các khuyên là (A,A), (B,B), (C,C)

Trang 8

Các kênh thoại trong mạng máy tính có thể chỉ cho phép truyền tin theo một chiều Trong trường hợp này người ta biểu diễn mạng máy tính bằng đồ thị

có hướng Ta có các định nghĩa sau:

Định nghĩa 5:( Định nghĩa đơn đồ thị có hướng)

Đơn đồ thị có hướng G=(V,E) bao gồm V là tập các đỉnh và E là tập các

cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung

Ví dụ:Sơ đồ biểu diễn mạng máy tính trong hình 4 sau là đơn đồ thị có hướng

Nếu trong mạng có thể có nhiều kênh thoại một chiều, ta sẽ phải sử dụng đến khái niệm đa đồ thị có hướng được định nghĩa như sau:

Định nghĩa 6:( Định nghĩa đa đồ thị có hướn+g)

Đa đồ thị có hướng G=(V, E) bao gồm V là tập các đỉnh và E là họ các

cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung Hai cung e1và e2 tương ứng với cùng một cặp đỉnh được gọi là cung lặp

Trang 9

Ví dụ: Sơ đồ biểu diễn mạng máy tính trong hình 5 dưới đây là đa đồ thị

Như trong hình 5 ở trên ta thấy hai đỉnh A và E là hai đỉnh kề nhau và cạnh e nối hai đỉnh A và E là cạnh của đồ thị nên e liên thuộc với hai đỉnh A và

E, tương tự với các đỉnh khác cũng vậy

Để có thể biết có bao nhiêu cạnh liên thuộc với một đỉnh,ta đưa vào định nghĩa sau

Trang 10

Trong đồ thị có hướng ta có khái niệm bán bậc ra (vào) của một đỉnh được định nghĩa như sau

Định nghĩa 4:

Ta gọi bán bậc ra (bán bậc vào ) của đỉnh v trong đồ thị có hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và ký hiệu là deg+(v), ( deg-(v))

Ví dụ 3: Xét đồ thị có hướng G ở hình 2 dưới đây, ta có

deg-(A)=2, deg-(B)=3, deg-(C)=1, deg-(D)=2, deg-(E)=2

deg+(A)=3, deg+(B)=2,deg+(C)=2, deg+(D)=2, deg+(E)=1

Trang 11

Do mỗi cung (u,v) sẽ được tính một lần trong bán bậc vào của đỉnh v và một lần trong bán bậc ra của đỉnh u nên ta có:

Giả sử G=(V,E) là đồ thị có hướng, khi đó

) ( deg v

V v

= ERất nhiều tính chất của đồ thị có hướng không phụ thuộc vào hướng trên các cung của nó Vì vậy, trong nhiều trường hợp sẽ thuận tiện hơn ta bỏ qua hướng trên các cung được gọi là đồ thị vô hướng tương ứng với đồ thị có hướng

đã cho

1.3 Đường đi, chu trình, đồ thị liên thông

1.3.1 Đường đi, chu trình

Định nghĩa 1:

Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên dương,

trên đồ thị vô hướng G = (V, E ) là dãy:x0, x1,…, xn-1, xn trong đó u=x0,v=xn,(xi,xi+1)E, i=0,1,2,…,n-1

Đường đi trên còn có thể biểu diễn dưới dạng dãy các cạnh (x0,x1),(x1,x2),…,(xn-1,xn)

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường

đi có đỉnh đầu và đỉnh cuối trùng nhau (tức là u=v) được gọi là chu trình Đường

đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại

Ví dụ: Xét đồ thị vô hướng cho trong hình 1 dưới đây

Trang 12

Trong hình 1 ta có: a, d, f ,e là đường đi đơn độ dài 4, còn d, e, c, a không

là đường đi, do (e, c) không là cạnh của đồ thị

Dãy b, c, f, e, b là chu trình độ dài 4 Đường đi a, b, e, d, a, b có độ dài là

5 không phải là đường đi đơn, do cạnh (a, b) có mặt trong nó hai lần

Trong đồ thị có hướng thì đường đi cũng được định nghĩa tương tự như sau

Định nghĩa 2:

Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên dương, trên đồ

thị có hướng G=(V, A) là dãy x0, x1, …, xn-1, xn trong đó u=x0,v=xn,(xi,xi+1)A,

i=0, 1, 2, …, n-1

Đường đi nói trên còn có thể biểu diễn dưới dạng các cung:

(x0,x1), (x1,x2),…,(xn-1,xn)

Đỉnh u được gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi

Đường đi có đỉnh đầu trùng với đỉnh cuối ( tức là u=v) gọi là chu trình Đường

đi hay chu trình được gọi là đơn nếu như không có cung nào bị lặp lại

Ví dụ: Trên đồ thị có hướng trong hình 1 ở trên thì a,d,c,f,e là đường đi đơn độ dài 4, còn d,e,c,a không là đường đi, do (e,c) không phải là cung của đồ thị Đường đi a,b,e,d,a,b có độ dài là 5 không phải là đường đi đơn, do cung (a,b)

có mặt trong nó hai lần

1.3.2 Đồ thị liên thông

Định nghĩa 3:

Đồ thị vô hướng G=(V,E) được gọi là liên thông nếu luôn tìm được

đường đi giữa hai đỉnh bất kỳ của nó

Như vậy hai máy tính bất kỳ trong mạng có thể trao đổi thông tin được với nhau khi và chỉ khi đồ thị tương ứng với mạng này là đồ thị liên thông

Trang 13

Ví dụ: đồ thị G trong hình 2 dưới đây là đồ thị liên thông, còn đồ thị H là không liên thông

Định nghĩa 4:

Ta gọi đồ thị con của đồ thị G=(V,E) là đồ thị H=(W,F), trong đó WV

và FE

Trong trường hợp đồ thị là không liên thông, nó sẽ phân rã ra thành một

số thành phần con liên thông đôi một không có đỉnh chung Những đồ thị con liên thông như vậy ta sẽ gọi là các thành phần liên thông của đồ thị

Ví dụ: Đồ thị H trong hình 2 ở trên gồm 3 thành phần liên thông là H1, H2, H3

Trong mạng máy tính có thể có những máy mà sự hỏng hóc của nó sẽ ảnh hưởng đến việc trao đổi thông tin trong mạng Các khái niệm tương ứng với tình huống này sẽ được đưa ra trong các định nghĩa sau

Định nghĩa 5:

Đỉnh v được gọi là đỉnh rẽ nhánh nếu việc loại bỏ v cùng với các cạnh

liên thuộc với nó khỏi đồ thị làm tăng số thành phần liên thông của đồ thị Cạnh e

được gọi là cầu nếu việc loại bỏ nó khỏi đồ thị làm tăng sồ thành phần liên thông

của đồ thị

Ví dụ: Trong đồ thị G ở hình 2 ở trên, đỉnh e và đỉnh d là đỉnh rẽ nhánh, còn các cạnh (d,g) và (e,f) là cầu

Đối với đồ thị có hướng có hai khái niệm liên thông phụ thuộc vào việc

Trang 14

Ví dụ: Đồ thị H trong hình 4 dưới đây là đồ thị liên thông yếu

Định lý1 (tiêu chuẩn nhận biết đồ thị định hướng)

Đồ thị vô hướng liên thông là định hướng được khi và chỉ khi mỗi cạnh

của nó nằm trên ít nhất một chu trình

Chứng minh

Điều kiện cần:

Giả sử (u,v) là một cạnh của đồ thị, khi đó sẽ tồn tại đường đi từ u tới v và ngược lại Như vậy (u,v)phải nằm trên ít nhất một chu trình (điều phải chứng minh)

Điều kiện đủ:

Giả sử C là một chu trình nào đó trong đồ thị,định hướng các cạnh trên chu trình này theo một hướng đi vòng theo nó.Và tiếp tục như vậy với các cạnh còn lại chưa được định hướng cho tới khi tất cả các cạnh của đồ thị được định hướng ta sẽ thu được đồ thị liên thông mạnh

Trang 15

1.4 Các dạng biểu diễn đồ thị

1.4.1 Biểu diễn hình học của đồ thị

Để có cái nhìn trực quan ta thường biểu diễn đồ thị bằng hình học, một đồ thị có thể biểu diễn trên một mặt phẳng hoặc trong không gian Phương pháp biểu diễn như sau: Biểu diễn các đỉnh của đồ thị bằng các điểm (hay vòng tròn nhỏ, ô vuông nhỏ) và nối hai điểm bằng một đường (cong, thẳng, mũi tên) khi cặp điểm đó ứng với một cạnh (cung) của đồ thị

Ví dụ 1: Cho đồ thị G = (V,E) trong đó

Định nghĩa: Xét 2 đồ thị G1=(V1, E1) và G2 =(V2, E2)

Hai đồ thị này được gọi là đẳng cấu với nhau nếu tồn tại 1 song ánh từ V1 vào V2 và từ E1 vào E2 sao cho nếu có cạnh e=(x,y)E1 tương ứng với cạnh e'=(x',y')E2 thì cặp đỉnh x,yV1 cũng là tương ứng cặp đỉnh x', y' V2

Trang 16

Nếu a,bX1 kề nhau thì f(a), f(b)X2 kề nhau

Vậy đây là 2 đồ thị đẳng cấu với nhau, ta có thể xem G1 và G2 thực chất chỉ là 1 chỉ có điều biểu diễn ở dạng hình học khác nhau, các tên đỉnh khác nhau

Để xét 2 đồ thị có đẳng cấu không là việc khó, tuy nhiên để xét 2 đồ thị không đẳng cấu với nhau thì đơn giản hơn

Đối với 2 đồ thị đẳng cấu thì các đồ thị đó có những tính chất bất biến như sau:

- Số đỉnh bằng nhau

- Số cạnh bằng nhau

- Bậc các đỉnh tương ứng cùng như nhau

- Hai ma trận kề cũng như nhau

- Các chu trình cũng như nhau

1.4.3 Biểu diễn đồ thị trên máy tính

Lĩnh vực đồ thị có nhiều ứng dụng trong thực tế, có thể mô hình nhiều ứng dụng bằng đồ thị và sử dụng máy tính để giải quyết các bài toán về ứng dụng

đó Nên việc biểu diễn và lưu trữ đồ thị trên máy tính là một vấn đề khá trọng tâm, phương thức biểu diễn từng loại đồ thị trên máy tính ảnh hưởng đến các giải thuật, phương pháp giải quyết các ứng dụng trên máy tính

Trang 17

+) Trường hợp G=(V, E) là đồ thị có hướng với V={x1, x2, , xn} thì mỗi phần tử aij của A được xác định như sau: đối với mỗi cặp đỉnh (xi, xj) từ xi đến xj nếu có d cung thì aij=d Chú ý aji=0 nếu không có cung nào hướng từ xj đến xi

Ma trận kề trong trường hợp này là không đối xứng

Trong 2 trường hợp trên ta chú ý nếu đỉnh xi có một khuyên thì phần tử tương ứng của ma trận kề là aii = 1

Ta có thể dùng ma trận kề biểu diễn đồ thị G1 và G2 trong hình 4.3 như sau:

Đối với đồ thị có trọng số mỗi cạnh e=(xi,xj) được gán một trọng số l(e) (còn viết là l(xi,xj) ) thì ma trận kề của nó được thay bằng ma trận có trọng số, khi đó mỗi phần tử của ma trận bằng trọng số của cạnh tương ứng:

aij = l(xi, xj)

Trang 18

1 0

0 0

2 1

1 2 0

1

0 1

1 1

1

0 1

0

1 1

0

Ưu điểm của phương pháp này là dễ dàng xác định được các cặp đỉnh có

kề nhau hay không hoặc rất thuận tiện khi tìm số bậc của mỗi đỉnh Việc truy cập phần tử của ma trận kề qua chỉ số không phụ thuộc vào số đỉnh của đồ thị

Nhược điểm lớn nhất của phương pháp này là không phụ thuộc vào số cạnh của đồ thị, ta luôn phải sử dụng n2 đơn vị bộ nhớ để lưu trữ ma trận kề của

1.4.3.2 Biểu diễn bằng ma trận liên thuộc đỉnh - cạnh

Xét G=(V,E), (V={1, 2, … ,n}, {e1, e2, … , en}), là đơn đồ thị có hướng Xây dựng ma trận A=(aij:i=1,2,…,n; j=1,2,….,m), trong đó

1, nếu đỉnh i là đỉnh đầu của cung ej

aij = -1, nếu đỉnh i là đỉnh cuối cùng của cung e

0, nếu đỉnh i không là đầu mút của cung ej

Ma trận A xây dựng theo quy tắc vừa nêu được gọi là ma trận liên thuộc đỉnh cạnh

Ví dụ: Xét đồ thị cho trong hình 4.4 sau

Ta có ma trận A tương ứng với đồ thị hình 4.4 như sau

Trang 19

1 0 1 0 0 0 0 0 0

1 1 0 0 1 0 0 0 0

0 0 1 1 0 1 0 0 0

0 0 0 0 1 0 1 1 0

0 1 0 0 0 1 1 0 1

0 0 0 0 0 0 0 1 1

Trang 20

Ví dụ: Hình 4.5 đồ thị G1và G2 được biểu diễn bằng danh sách cạnh (cung) như sau:

Như vậy để lưu trữ đồ thị cần sử dụng 2m đơn vị bộ nhớ

Nhược điểm của phương pháp này là để xác định những đỉnh nào của đồ thị là kề với một đỉnh cho trước chúng ta phải làm cỡ m phép so sánh

1.4.3.4 Danh sách kề

Phương pháp biểu diễn bằng danh sách kề cũng được sử dụng khá phổ

biến và thường hay dùng cho đồ thị có hướng

Danh sách kề cho đỉnh xi là danh sách gồm tất cả các đỉnh kề của xi theo thứ tự các đỉnh trong tập đỉnh X Ta có thể biểu diễn đồ thị như một mảng FIRST, với phần tử FIRST[i] là con trỏ trỏ tới danh sách kề cho đỉnh xi

Ví dụ: ở hình 4.5 đồ thị G1 và G2 được biểu diễn bằng danh sách kề như sau:

Đầu Cuối

1 2

1 3

2 3

2 4

3 4

Danh sách cạnh G1 Đầu Cuối 1 2

2 3

3 1

4 1

4 2 Danh sách cung G2

Trang 21

Bộ nhớ sử dụng cho phương pháp biểu diễn danh sách kề là tỷ lệ thuận với tổng số đỉnh và các cạnh của đồ thị

Nhược điểm của cách biểu diễn này là thời gian cần thiết để xác định có một cạnh đi từ đỉnh xi tới đỉnh xj có hay không mất O(n) Cách biểu diễn này thích hợp cho các thuật toán mà cấu trúc đồ thị hay thay đổi như thêm hoặc bớt các cạnh

Trang 22

CHƯƠNG 2 BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG 2.1 Mạng, Luồng trong mạng

Định nghĩa 1: (Định nghĩa về mạng)

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ôngcó cung đi ra gọi là điểm thu và mỗi cung e=(v,w)E được gán 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 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:(Định nghĩa luồng trong mạng)

Giả sử cho mạng G=(V,E), ta gọi luồng trong mạng là ánh xạ f:ER+ gán cho mỗi cung e(v,w)E một số 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 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: Divf(v)= ( , )

)

v w f

v w

w v f

v w

s w

t w

w v f

Trang 23

Ví dụ: Mạng G và luồng f trong mạng cho trong hình1 dưới đây

Trong hình 1 các số ghi cạnh tương ứng là khả năng thông qua và luồng trong mạng

v u c

) , (

Và giá trị luồng thông từ X sang Y là:

f(X,Y) = 

X v Y u

v u f

,

) , (

X w X

v

Trang 24

, ( (

) )

w v f v

w f

v w v

X w

w v f

* ) , ( = - val(f),

X

v X v

w v

X w X v

w v f

* ) , (

Mặt khác do f là luồng trong mạng nên nó thoả mãn điều kiện

f(e)c(e) hay là 

*

) , (

X w V v

w v

X w V v

w v

X w V v

w v

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

2)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); 3)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) 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 được gọi là cung nghịch Đồ thị Gf được gọi là đồ thị tăng

luồng

Ví dụ : Các số viết cạnh các cung của G ở hình 2 theo thứ tự là khả năng

thông qua và luồng trên cung

Trang 25

Giả sử P=(s=v0,v1,…,vk=t) là một đường đi từ s đến t trên đồ thị tăng luồng Gf Gọi 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 theo quy tắc sau:

f’(u,v) ={f(u,v)+ , nếu (u,v)P là cung thuận,

f(u,v)- , nếu (u,v)P là cung nghịch, f(u,v), nếu (u,v) P

} f’ xây dựng như trên cũng là luồng trong mạng và ta có:

val(f’)=val(f)+ Thủ tục biến đổi từ luồng f sang luồng f’ gọi là tăng luồng dọc theo đường tăng P

Như vậy ta có khái niệm đường tăng luông được định nghĩa như sau

Định nghĩa 2: (Định nghĩa đường tăng luồng)

Với Gf là đồ thị tăng luồng được xây dựng như trong phần chứng minh hệ quả ở mục 2.1 trên ta định nghĩa đường tăng luồng như sau:

Đường tăng luồng f là mọi đường đi từ s đến t trên đồ thị tăng luồng Gf

Ví dụ: Trên đồ thị tăng luồng Gf ở hình vẽ 1 dưới đây thì đường tăng luồng là mọi đường đi từ s đến t

Trang 26

Định lý dưới đây cho mối quan hệ giữa luồng cực đại, đường tăng luồng

và lát cắt

Định lý 1 Các mệnh đề sau đây là tương đương:

i)f là luồng cực đại trong mạng

ii) Không tìm được đường tăng luồng P

iii) val(f)=c(X,X*)với một lát cắt (X,X*) nào cắt

Vậy không tìm được đường tăng luồng.( đpcm)

iiiii : Giả sử ta không tìm được đường tăng luồng Ký hiệu X là tập tất cả các đỉnh có thể đến được từ đỉnh s trong đồ thị Gf và đặt X*=V\X Khi đó (X,X*) là lát cắt, và f(v,w)=0 với mọi vX*, wX nên

X w X v

w v

X w X v

w v f

*

) ,

X w X x

w v f

với vX, wX*, do (v,w) Gf,nên f(v,w)= c(v,w) Vậy

val(f)= 

 *

) , (

X w X v

w v

X w X v

w v

c = c(X,X*)

Trang 27

iiii: Theo bổ đề 1, val(f) c(X,X*) với mọi luồng f và với mọi lát cắt (X,X*).Vì vậy, từ đẳng thức val(f) = c(X,X*) suy ra luồng f là luồng cực đại trong mạng

Vậy định lý được chứng minh

Định lý trên là cơ sở xây dựng thuật toán tìm luồng cực đại trong mạng sẽ xét ở mục sau

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

2.3.1.Giới thiệu bài toán luồng cực đại trong mạng

Như trên ta đã đề cập tới bài toán luồng cực đại trong mạng Đây là một trong những bài toán trên đồ thị có nhiều ứng dụng trong thực tế cũng như trong

lý thuyết đồ thị

Bài toán được đề xuất bởi Ford và Fulkerson vào những năm 1950

2.3.2.Nội dung bài toán

Cho mạng G=(V,E), hãy tìm trong mạng G một luồng f* sao cho f*là luồng cực đại trong mạng (hay luồng ứng với giá trị luồng val(f*) là lớn nhất)

2.4 Thuật toán tìm luồng cực đại trong mạng

(Thuật toán Ford- Fulkerson)

2.4.1.Tư tưởng thuật toán

-Thuật toán gồm 6 bước

Thuật toán bắt đầu từ luồng bất kì (có thể bắt đầu từ luồng không), sau đó tăng luồng bằng cách tìm các đường tăng luồng Để tìm đường tăng luồng ta sẽ

áp dụng phương pháp đánh dấu Nhãn của các đỉnh sẽ chỉ ra theo các cung nào

có thể tăng luồng và tăng được bao nhiêu Mỗi khi tìm được đường tăng luồng ta mới thu được nhãn để đánh dấu lại các đỉnh Thuật toán sẽ kết thúc khi nào không tìm được đường đi tăng luồng nào nữa

A-Đánh dấu các đỉnh

Mỗi đỉnh có 3 trạng thái:

+) Đỉnh có nhãn

Trang 28

Nhãn của đỉnh Vi gồm 2 phần:

+) (+Vj,δ)

+) (-Vj, δ) trong đó Phần thứ nhất +Vj hoặc –Vj chỉ ra cần tăng hay giảm luồng theo (Vj,Vi) hay (Vi,Vj)

Phần thứ hai δ chỉ ra lượng lớn nhất có thể tăng (giảm) luồng Việc gán nhãn cho các đỉnh tương ứng với thủ tục tìm đường đi tăng luồng từ

s->t Đầu tiên tất cả các đỉnh chưa có nhãn Ta thực hiện các bước sau:

2 Mỗi đỉnh chưa có nhãn Vj ЄҐ-(vi) mà f[j,i]>0 được gán nhãn

(-vi, δ(vj)) với: δ(vj)= Min{ δ(vi) , f [j,i]}

=> Đỉnh Vi trở thành có nhãn và đã xét còn các đỉnh Vj trong (1) và (2) là chưa xét

Bước 3:

Lặp lại bước 2 cho đến khi nào hoặc là đỉnh t được đánh dấu thì chuyển sang bước 4, hoặc là t không có nhãn và không thể đánh dấu được nữa => thuật toán kết thúc với luồng cực đại Khi đó nếu kí hiệu X là tập các đỉnh có nhãn còn

Trang 29

1 Nếu đỉnh x có nhãn(+u, δ(x)) thì tăng luồng theo (u, x) từ f(u, x) lên f(u,x) + δ(t)

2 Nếu đỉnh x có nhãn (-u, δ(x)) thì giảm luồng theo (x, u) từ f(x, u) bởi f(x,u)- δ(t)

Bước 6:

Nếu u=s thì xoá tất cả các nhãn và quay lại bước 1 với luồng đã được điều chỉnh ở bước 5, nếu u khác s thì đặt x = u và quay lai bước 5

2.4.2.Sơ đồ thuật toán ford_ Fulkersol

+)Thuật Toán Ford – Fulkerson

(Có thể được mô tả bằng thủ tục dưới đây)

While not Stop do

If<tìm được đường tăng luồng p> then

<tăng luồng dọc theo đường tăng p >

Else Stop:=true;

End;

+) Hai thủ tục tìm đường tăng luồng và tăng luồng theo đường tăng luồng

có thể mô tả bằng chương trình dưới đây:

Procedure Find_Path;{ thủ tục gán nhãn tìm đường tăng luồng }

p[v], [v] là nhãn của đỉnh v;

VT – danh sách các đỉnh nhưng chưa xét;

c[u,v]- khả năng thông qua của cung (u,v),u,v  V;

Trang 30

PathFound:=true;{Gán tìm thấy đường tăng luồng là đúng}

While VT  do

Begin

u<= VT; (* Lấy u từ VT *) for v  V\VT do

Trang 32

True

C[u,v] >0 and (F[u,v]<C[u,v])

P[v]:= -u; [v]:= min{[u],F[v,u]}

V T := V T  {v}

End

True v= t

Trang 33

+)Sơ đồ thủ tục tăng luồng - Ìnlow (Tăng luồng khi có đường tăng)

False

False

True

True Begin

f[v,u]:=f[v,u] + tang

u:=v; v:=P[u]

v > 0 v:= -v

f[v,u]:=f[v,u] -tang

v:= P[t] ; u:= t ; tang:=

[t]

Ngày đăng: 08/08/2016, 10:09

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
(1) Nguyễn Đức Nghĩa , Nguyễn Tô Thành -Toán Rời Rạc. Nhà xuất bản Đại Học Quốc Gia Hà Nội Sách, tạp chí
Tiêu đề: Nguyễn Đức Nghĩa , Nguyễn Tô Thành -Toán Rời Rạc
Nhà XB: Nhà xuất bản Đại Học Quốc Gia Hà Nội
(2) Trần Đức Huyên - Các thuật giải trong tin học Nhà xuất bản Giáo dục - 1991 Sách, tạp chí
Tiêu đề: - Các thuật giải trong tin học
Nhà XB: Nhà xuất bản Giáo dục - 1991
(3) Đỗ Xuân Lôi - Cấu trúc dữ liệu và giải thuật Nhà xuất bản Thống Kê Sách, tạp chí
Tiêu đề: Đỗ Xuân Lôi - Cấu trúc dữ liệu và giải thuật
Nhà XB: Nhà xuất bản Thống Kê
(5) Nasingh Deo - Graph Theory with Applications to Engineering. Prentice Hall of India Private Linited Sách, tạp chí
Tiêu đề: Nasingh Deo - Graph Theory with Applications to Engineering
(6) Robert Sedgewick - Cẩm Nang Thuật Toán. Nhà xuất bản Khoa Học Kỹ Thuật (7) http://www.google.com.vn Sách, tạp chí
Tiêu đề: Robert Sedgewick - Cẩm Nang Thuật Toán. "Nhà xuất bản Khoa Học Kỹ Thuật (7)
Nhà XB: Nhà xuất bản Khoa Học Kỹ Thuật (7) "http://www.google.com.vn
(4) Phạm Hữu Khang, Hoàng Đức Hải, Đoàn Thiện Ngân - Lập trình Window Form –Nhà xuất bản lao động Hà Nội Khác

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w