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 1MỤ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 2CHƯƠ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 3LỜ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 4trong 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 5CHƯƠ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à EV× V Bộ
G = (V,E) được gọi là đồ thị hữu hạn Mỗi phần tử xV 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, yV 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 6Trong 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 7Sơ đồ 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 8Cá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 9Ví 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 10Trong đồ 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 11Do 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 12Trong 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 13Ví 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 đó WV
và FE
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 14Ví 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 151.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,yV1 cũng là tương ứng cặp đỉnh x', y' V2
Trang 16Nếu a,bX1 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 181 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
nó
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 191 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 20Ví 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 21Bộ 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 22CHƯƠ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:ER+ 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ó :
0f(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 vs,t: Divf(v)= ( , )
)
v w f
v w
w v f
v w
s w
t w
w v f
Trang 23Ví 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 25Giả 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)
iiiii : 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 vX*, wX nên
X w X v
w v
X w X v
w v f
*
) ,
X w X x
w v f
với vX, wX*, 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 27iiii: 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 28Nhã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 291 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 30PathFound:=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 32True
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]