Tải bản đầy đủ (.pdf) (83 trang)

Thuật toán tìm luồng cực đại trên mạng và ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.68 MB, 83 trang )

..

BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG

HỒ XUÂN BÌNH

THUẬT TỐN TÌM LUỒNG CỰC ĐẠI
TRÊN MẠNG VÀ ỨNG DỤNG

LUẬN VĂN THẠC SĨ KỸ THUẬT

Đà nẵng - 2006


-i-

LỜI CAM ĐOAN

Tơi xin cam đoan:
1. Đây là cơng trình nghiên cứu của riêng tôi.
2.Các số liệu, các kết quả nêu trong luận văn là trung thực và chưa từng được ai cơng
bố trong bất kì cơng trình nào khác.

Tác giả

Hồ Xuân Bình


- ii -


MỤC LỤC

Lời cam đoan .............................................................................................................. ...i
Mục lục ....................................................................................................................... ..ii
Danh mục các bảng biểu ............................................................................................ .iv
Danh mục các hình vẽ ................................................................................................ ..v
Mở đầu ....................................................................................................................... vii
Nội dung ..................................................................................................................... ..1
Chương1 TỔNG QUAN ............................................................................................ ..1
1.1.Mạng..................................................................................................................... ..1
1.1.1.Các khái niệm cơ bản của lý thuyết đồ thị ........................................................ ..1
1.1.2. Mạng ................................................................................................................ ..9
1.1.3. Luồng trong mạng ............................................................................................ ..9
1.1.4. Luồng cực đại, lát cắt cực tiểu ......................................................................... 10
1.1.5.Mạng tổng quát ................................................................................................. 12
1.1.6. Mạng với nhiều điểm phát và điểm thu ........................................................... 13
1.1.7.Biểu diễn đồ thị trên máy tính ........................................................................... 14
1.2 Lập trình song song và phân tán .......................................................................... 20
1.2.1. Giới thiệu về lập trình song song. .................................................................... 20
1.2.2. Các mơ hình lập trình song song ...................................................................... 23
1.2.3. Thuật tốn song song ....................................................................................... 34
Chương 2 THUẬT TỐN TÌM LUỒNG CỰC ĐẠI TRÊN MẠNG ....................... 38
2.1. Thuật tốn truyền thống ...................................................................................... 39
2.2. Thuật tốn hốn chuyển nguồn đích có trọng số tìm luồng cực đại ................... 43
2.3.Thuật tốn song song tìm luồng cực đại trên mạng…………………… ............. 47
Chương 3 ỨNG DỤNG CỦA MẠNG ...................................................................... 57


- iii -


3.1.Cài đặt và Demo chương trình ............................................................................. 57
3.2. Ứng dụng trong lý thuyết tổ hợp ......................................................................... 64
3.3. Ứng dụng trong thực tế ....................................................................................... 68
Kết luận và hướng phát triển ...................................................................................... 73
Tài liệu tham khảo ...................................................................................................... 75


- iv -

DANH MỤC CÁC BẢNG BIỂU

Bảng 3.1. Test1input.txt ............................................................................................. 60
Bảng 3.2. Test1output.txt ........................................................................................... 62
Bảng 3.3. Bảng phân công đề tài tốt nghiệp .............................................................. 68


-v-

DANH MỤC CÁC HÌNH VẼ
Hình 1.1. Một số hình ảnh về đồ thị ........................................................................... 2
Hình 1.2. Đồ thị vơ hướng ......................................................................................... 2
Hình 1.3. Đồ thị có hướng.......................................................................................... 3
Hình 1.4. Minh hoạ đồ thị vơ hướng .......................................................................... 4
Hình 1.5. Minh hoạ đồ thị có hướng .......................................................................... 5
Hình 1.6. Đồ thị đầy đủ .............................................................................................. 6
Hình 1.7. Đồ thị lưỡng phân ...................................................................................... 7
Hình 1.8. Trọng đồ ..................................................................................................... 8
Hình 1.9. Mạng .......................................................................................................... 9
Hình 1.10. Biểu diễn luồng trên mạng ....................................................................... 10
Hình 1.11. Mạng tổng quát ........................................................................................ 13

Hình 1.12. Mạng với nhiều điểm phát, điểm thu ....................................................... 14
Hình 1.13. Ma trận kề ................................................................................................ 14
Hình 1.14. Minh hoạ đồ thị ........................................................................................ 16
Hình 1.15. Cài đặt danh sách móc nối ....................................................................... 16
Hình 1.16. Minh hoạ đồ thị ........................................................................................ 17
Hình 1.17. Dùng một mảng các đỉnh ......................................................................... 17
Hình 1.18. Danh sách móc nối ................................................................................... 18
Hình 1.19. Mơ hình lập trình song song .................................................................... 20
Hình 1.20. Sơ đồ trạng thái của Thread ..................................................................... 26
Hình 1.21. Mơ hình triệu gọi các đối tượng từ xa ...................................................... 29
Hình 1.22. Gọi phương thức của đối tượng thông qua lớp trung gian ....................... 30
Hình 1.23. Sự trao đổi thơng điệp giữa các máy tính trong hệ PVM ........................ 32
Hình 2.1. Sơ đồ thuật tốn tuần tự tìm luồng cực đại trên mạng ............................... 40


- vi -

Hình 2.2. Mơ phỏng ý tưởng thuật tốn song song .................................................... 47
Hình 2.3. Mơ hình Client, Server ............................................................................... 48
Hình 2.4. Sơ đồ thuật tốn song song tìm luồng cực đại trên mạng .......................... 55
Hình 2.5. Cơ sở dữ liệu mạng .................................................................................... 55
Hình 3.1. Sơ đồ cài đặt chương trình Demo ............................................................. 58
Hình 3.2. Giao diện Server ......................................................................................... 59
Hình 3.3. Giao diện Client ......................................................................................... 59
Hình 3.4. Giao diện bộ test1....................................................................................... 62
Hình 3.5. Dữ liệu nhập từ đồ thị ................................................................................ 63
Hình 3.6. Kết quả xuất ra đồ thị ................................................................................. 63
Hình 3.7. Mạng tương ứng với bài toán phân đề tài tốt nghiệp ................................. 68
Hình 3.8. Hình ảnh vận chuyển hàng ......................................................................... 69
Hình 3.9. Mạng vận chuyển hàng .............................................................................. 70

Hình 3.10. Hình ảnh vận chuyển dầu ......................................................................... 71
Hình 3.11. Mạng tổng quát vận chuyển dầu .............................................................. 72


- vii -

MỞ ĐẦU
1.1. Lý do chọn đề tài
Ngày nay, lĩnh vực toán ứng dụng trong tin học đã trở nên phát triển mạnh mẽ. Toán
học là nền tảng của tin học, cơ sở toán học và tư duy toán học là hai yếu tố quan trọng
hỗ trợ đắc lực trong lĩnh vực tin học.Vai trị của tốn học ngày một khẳng định hơn khi
có sự ra đời của bộ mơn tốn ứng dụng trong tin học.Trong đó, vấn đề mạng, bài toán
luồng cực đại và lát cắt cực tiểu trên mạng là một điển hình. Lý thuyết mạng, bài toán
luồng cực đại trên mạng là cơ sở khoa học để giải quyết các bài tốn đặt ra trong giải
tích tổ hợp cũng như trong thực tế. Nó thực sự có một vai trị quan trọng trong việc
giải quyết những vấn đề đặt ra trong cuộc sống, đem lại những ứng dụng mạnh mẽ.
Đây là lĩnh vực đang được các nhà khoa học quan tâm nghiên cứu.Trong bối cảnh hiện
tại, thuật tốn tìm luồng cực đại trên mạng cần được nghiên cứu và cải tiến theo hướng
song song nhằm phát huy sức mạnh của bài toán đồng thời bài toán cần được nhân
rộng miền ứng dụng trong lý thuyết tổ hợp cũng như trong đời sống thực tế.
Xuất phát từ tình hình thực tiễn trên, tơi chọn đề tài làm luận văn tốt nghiệp cao học:
Thuật tốn tìm luồng cực đại trên mạng và ứng dụng
1.2 Mục tiêu và nhiệm vụ
Mục đích của đề tài: Đề xuất thuật tốn song song tìm luồng cực đại trên mạng từ đó
xây dựng các ứng dụng thực tiễn.
Nhiệm vụ:
-

Tìm hiểu lý thuyết mạng, lập trình song song và phân tán.


-

Tìm hiểu thuật tốn tìm luồng cực đại trên mạng.

-

Xây dựng thuật tốn mới.

-

Xây dựng các ứng dụng.


- viii -

Luận văn tập trung nghiên cứu lý thuyết, xây dựng mơ hình, triển khai thực nghiệm,
phân tích, đánh giá kết quả, từ đó đề xuất giải pháp tổng quát.
1.3. Đối tượng và phạm vi nghiên cứu
- Lý thuyết tổng quan về đồ thị, mạng, lập trình song song và phân tán.
- Cách biểu diễn đồ thị trên máy tính.
- Thuật tốn giải bài tốn tìm luồng cực đại trên mạng.
1.4. Giả thuyết nghiên cứu
Lý thuyết đồ thị, toán rời rạc, lập trình song song và phân tán.
Đồ thị thuộc loại hình nghiên cứu: lý thuyết + ứng dụng
1.5. Phương pháp nghiên cứu
Kết hợp lý thuyết + lập trình thực nghiệm nhằm xây dựng thuật tốn tìm luồng cực đại
trên mạng, thuật tốn được cài đặt bằng ngơn ngữ lập trình Java.
Đề tài được thực hiện theo tiến trình sau:
-


Thu thập, phân tích tài liệu liên quan đến đề tài.

-

Nghiên cứu, lựa chọn phương pháp giải quyết vấn đề đặt ra.

-

Triển khai xây dựng ứng dụng thực tiễn.

-

Kiểm tra thử nghiệm và đánh giá kết quả đem lại.

1.6. Ý nghĩa khoa học và thực tiễn của đề tài
-

Cơ sở phát triển lý thuyết mạng

-

Cơ sở phát triển lập trình song song

-

Tài liệu phục vụ cho việc dạy học

-

Ứng dụng trong lý thuyết tổ hợp và trong thực tế


1.7. Bố cục luận văn
Kết cấu luận văn bao gồm: Phần mở đầu, nội dung, kết luận và hướng phát triển, tài
liệu tham khảo. Trong đó:
Mở đầu: Nêu lên lý do chọn đề tài, mục đích, nhiệm vụ và các phương pháp nghiên
cứu giải quyết vấn đề. Từ đó đưa ra lý do chọn đề tài và phương án triển khai.


- ix -

Phần nội dung:
Chương 1 Tổng quan
Trình bày lý thuyết đồ thị, lý thuyết mạng, lập trình song song và phân tán
Chương 2 Thuật tốn tìm luồng cực đại trên mạng
Phát biểu bài tốn, trình bày thuật tốn truyền thống, thuật tốn hốn chuyển nguồn
đích, từ đó thiết kế thuật tốn song song tìm luồng cực đại trên mạng.
Chương 3 Ứng dụng của mạng
Ghi nhận kết quả Demo chương trình cài đặt thuật tốn song song, nêu lên các ứng
dụng của mạng trong lý thuyết tổ hợp và những ứng dụng quan trọng trong thực tế.
Kết luận và hướng phát triển: Trình bày đánh giá các kết quả đạt được, những vấn đề
cịn hạn chế từ đó đề xuất hướng nghiên cứu tiếp theo của đề tài.


-1Chương 1 TỔNG QUAN

1.1.Mạng
Giới thiệu
Lý thuyết mạng là một trong những vấn đề quan trọng đã và đang được các nhà khoa
học quan tâm nghiên cứu. Trong đó, bài tố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ị đem lại những ứng dụng to lớn 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 năm 1950 gắn
liền với hai nhà toán học Mỹ là Ford và Fulkerson. Trong phần này chúng ta sẽ trình
bày lý thuyết về đồ thị, mạng dùng làm cơ sở để xây dựng thuật tốn tìm luồng cực đại
trên mạng.
1.1.1.Các khái niệm cơ bản của lý thuyết đồ thị
Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứng dụng hiện đại.
Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào những năm đầu của thế kỷ
18 bởi nhà toán học lỗi lạc người Thụy Sĩ Leonhard Euler. Chính ơng là người đã sử
dụng đồ thị để giải quyết bài toán về 7 cây cầu ở thành phố Konuysberg.
1.1.1.1. Định nghĩa đồ thị
Đồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối với các đỉnh ấy. Được
mơ tả dưới hình thức G=(V,E). Trong đó V(Vertices) là tập hợp các đỉnh và E(Edges)
là tập hợp các cạnh của đồ thị. Có thể xem E là tập hợp các cạnh (u,v) trong đó u,v là
các đỉnh thuộc V.
Hình 1.1 minh họa một số hình ảnh về đồ thị.


-2-

Hình 1.1: Một số hình ảnh về đồ thị
Đồ thị vô hướng G = (V,E) gồm một tập V các đỉnh và tập E các cạnh trong đó mỗi
cạnh e được liên kết với một cặp đỉnh u,v trong V( khơng kể thứ tự ).

u

e

v

Ví dụ hình 1.2 biểu diển đồ thị vơ hướng


2

3

1

6

4

5

Hình 1.2: Đồ thị vơ hướng


-3Đồ thị có hướng G = (V,E) gồm một tập V các đỉnh và tập E các cạnh có hướng trong
đó mỗi cạnh e được liên kết với một cặp đỉnh u,v trong V( có thứ tự ).

u

e

v

Hình 1.3 biểu diễn đồ thị có hướng

2

3


1

6

4

5

Hình 1.3: Đồ thị có hướng
Cho đồ thị G(V,E).
Nếu cạnh e liên kết với đỉnh u, v thì ta nói e là cạnh liên thuộc hai đỉnh u, v và hai đỉnh
u, v được gọi là biên của cạnh e; u, v là hai đỉnh kề nhau.
Cạnh có hai đỉnh liên kết trùng nhau gọi là khuyên.
Nếu có nhiều cạnh liên kết với cùng một cặp đỉnh thì ta gọi các cạnh ấy là song song
với nhau.
Đỉnh khơng có đỉnh kề gọi là đỉnh cơ lập.
Số đỉnh của đồ thị gọi là bậc của đồ thị.
Số cạnh của đồ thị gọi là cỡ của đồ thị.
Đồ thị hữu hạn là đồ thị có bậc và cỡ hữu hạn.
Đồ thị đơn là đồ thị khơng có khun và khơng có cạnh song song.
Bậc, nửa bậc vào, nửa bậc ra
Cho đồ thị G(V,E).
Bậc của đỉnh v là tổng số cạnh liên thuộc đến nó. Kí hiệu: d(v)
Cơng thức tính bậc: d(v) = số cạnh liên thuộc v + 2*số khuyên.


-4Từ công thức ta suy ra: v là đỉnh cô lập khi chỉ khi d(v) = 0.
Đỉnh treo là đỉnh có bậc bằng 1.
Cho G(V,E) là đồ thị có hướng.

Nữa bậc ra của đỉnh v ( kí hiệu là do(v) ) là tổng số cung đi ra từ đỉnh v.
Nữa bậc vào của đỉnh v ( kí hiệu là di(v) ) là tổng số cung đi vào đỉnh v.
Ví dụ:
Xét đồ thị vơ hướng trên hình 1.4

5
2
1

4

3

6

Hình 1.4: Minh hoạ đồ thị vơ hướng
Trong đồ thị này ta có:
d(1)=2; d(2) = 2; d(3) = 2; d(4) = 3; d(5) = 1; d(6) = 0;
Ví dụ:
Xét đồ thị có hướng trong hình 1.5

5
2
1

4

3

6



-5Hình 1.5: Minh hoạ đồ thị có hướng
Trong đồ thị này ta có:
di(1)=1; di(2) = 2; di(3) = 1; di(4) = 0; di(5) = 1; di(6) = 0;
do(1)=1; do(2) = 0; do(3) = 1; do(4) = 3; do(5) = 0; do(6) = 0;
Bổ đề bắt tay( Hand Shaking Lemma )
Cho đồ thị vơ hướng G(V,E). Khi đó:
i) Tổng số bậc của đồ thị là số chẵn và

 d (v)  2.card ( E)
vV

ii) Nếu G là đồ thị có hướng thì

d
vV

o

(v)   d i (v)  card ( E )
vV

Với card(E): số phần tử của tập E.
Chứng minh
Mỗi cạnh e(u,v) được tính tương ứng 2 bậc, một bậc của u và một bậc của v, do vậy

 d (v)  2.card ( E) và tổng số bậc là một số chẵn.
vV


Mỗi cạnh e(u,v) được tính tương ứng 2 bậc, một bậc ra của u và một bậc vào của v, do
vậy

d
vV

o

(v)   d i (v)  card ( E ) .
vV

Hệ quả
Từ bổ đề trên ta suy ra: số đỉnh bậc lẻ của đồ thị là một số chẵn.
Đồ thị đầy đủ ( Kn )
Đồ thị Kn được gọi là đầy đủ nếu giữa 2 đỉnh bất kì của đồ thị đều có cung liên kết.
Ví dụ đồ thị trên hình 1.6 là đồ thị đầy đủ bậc 5.


-6-

2

1

3

5
4
Hình 1.6: Đồ thị đầy đủ
Mệnh đề : Mọi đỉnh của đồ thị Kn có bậc n -1 và Kn có n(n-1)/2 cạnh.

Đồ thị lưỡng phân G(V,E) là đồ thị mà tập các đỉnh được phân làm 2 tập rời nhau V 1,
V2 sao cho bất kì cạnh e=(u,v) của đồ thị ta có u  V1 , v  V2
Kí hiệu: G=({V1, V2}, E )
Đồ thị Km,n là đồ thị lưỡng phân({V1, V2},E ) với tập V1 có m đỉnh và tập V2 có n đỉnh
và với mỗi đỉnh của V1 được nối với mỗi đỉnh của V2 bằng duy nhất một cạnh.
Hình 1.7 biểu diễn đồ thị lưỡng phân K3,4

a

x

b

y

c

z

Hình 1.7: Đồ thị lưỡng phân

t


-7-

Mệnh đề: Cho đồ thị Km,n là đồ thị lưỡng phân ({V1, V2},E) với tập V1 có m đỉnh và
tập V2 có n đỉnh khi đó mỗi đỉnh trong V1 có bậc là n và mỗi đỉnh trong V2 có bậc là m
và đồ thị có m.n cạnh.
Đường đi, chu trình, tính liên thơng

Định nghĩa: Cho đồ thị G(V,E).
Dãy p từ đỉnh u đến đỉnh v là dãy các đỉnh và các cạnh nối tiếp nhau từ đỉnh u đến đỉnh
v. Số cạnh trên dãy p được gọi là độ dài của dãy p.
Dãy p được biểu diễn như sau:
P = (u, e1,v1,…….,en-1,vn-1,en,v)
Đường đi từ u đến v là dãy từ đỉnh u đến v sao cho các cạnh không lặp lại.
Đường đi sơ cấp là đường đi sao cho khơng đi qua mỗi đỉnh q một lần.
Vịng là dãy có đỉnh đầu và đỉnh cuối trùng nhau.
Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau.
Chu trình sơ cấp là chu trình khơng đi qua mỗi đỉnh quá một lần.
Dãy có hướng trong đồ thị có hướng là dãy các đỉnh và các cung nối tiếp nhau
(e1,e2,……….,en) thỏa mãn đỉnh cuối cùng của ei là đỉnh đầu của cung ei+1 , i= 1..n-1.
Đường đi có hướng trong đồ thị có hướng là dãy có hướng, trong đó các cung khơng lặp
lại.
Đường đi có hướng sơ cấp là đường đi có hướng khơng đi qua mỗi đỉnh q một lần.
Vịng có hướng là dãy có hưỡng với đỉnh đầu và đỉnh cuối trùng nhau.
Chu trình có hướng là đường đi có hướng với đỉnh đầu và đỉnh cuối trùng nhau.
Chu trình có hướng sơ cấp là chu trình có hướng khơng đi qua mỗi đỉnh q một lần.
Đồ thị vô hướng gọi là liên thông, nếu mọi cặp đỉnh của nó đều có đường đi nối chúng
với nhau.
Đồ thị có hướng gọi là liên thơng mạnh, nếu mọi cặp đỉnh của nó đều có đường đi có
hướng nối chúng với nhau.


-8Đồ thị có hướng gọi là liên thơng yếu, nếu đồ thị lót của chúng(đồ thị vơ hướng) liên
thơng.
Đồ thị có hướng gọi là bán liên thơng, nếu mọi cặp đỉnh (u,v) bao giờ cũng tồn tại
đường đi có hướng từ u đến v hoặc từ v đến u.
Trọng đồ ( có hướng ) là đồ thị( có hướng ) mà mỗi cạnh của nó được gán một số.
Trọng đồ được biểu diễn bởi: G = (V,E, w) trong đó V: tập các đỉnh, E: tập các cạnh, w:

là trọng số của cạnh( cung ) e với mọi e thuộc E.
Trong trọng đồ, độ dài trọng số của đường đi p là tổng các trọng số trên đường đi đó.
Hình 1.8 mơ phỏng trọng đồ.
5

2

3

4

7

1

2

6

3

9
8

4

1

5


Hình 1.8: Trọng đồ
1.1.2. Mạng
Định nghĩa
Ta gọi mạng là đồ thị có hướng G(V,E,C) thỏa các điều kiện sau:
(1) Có duy nhất một đỉnh gọi là nguồn, khơng liên thuộc cung vào
(2) Có duy nhất một đỉnh gọi là đích, khơng liên thuộc cung ra
(3) Khả năng thông qua của cung : cij là các số khơng âm
(4) Đồ thị liên thơng yếu
Ví dụ: Đồ thị trên hình 1.9 là mạng.


-910

b

c

12

5

a

z
4

8

10


18

12

d

e

Hình 1.9: Mạng
Trong đó a: nguồn , z: đích
Các khả năng thông qua: cab=12; cad= 10; cbc=10; c be=4; ccd=8; ccz=5; cde=12; cez=18.
1.1.3. Luồng trong mạng
Định nghĩa
Cho mạng G(V,E,c). Tập các giá trị f ij | (i, j)  G gọi là luồng trên mạng G nếu thoả:
(1) 0  f ij  cij , (i, j )  G
(2) k  a, z ;

f

( i , k )G

ik



f

( k , j )G

kj


Ví dụ:
Với đồ thị cho trên hình 1.10, tập các fij biểu diễn bằng các số trong ngoặc đơn trong
mạng gọi là luồng.
10(2)

b

c

12(3)

5(1)

a

z
4(1)

8(1)

10(4)

18(6)

d

12(5)

e


Hình 1.10: Biểu diễn luồng trên mạng
Định lý
Cho f ij , (i, j )  G là nguồn trên mạng G với nguồn a đích z. Khi đó :


- 10 -

f

( a ,i )G

ai

f



( i , z )G

iz

Chứng minh
Ta gán fij=0 với các đỉnh i, j không kề nhau. Ta có:

 f
jV iV

jV iV




   f



jV



  f ji

ij



   f

jV \{ a , z }



iV

ij



iV



  f ji   0
iV


ij

 
 

  f ji     f iz   f zi     f ia   f ai   0
iV
iV
iV
  iV
  iV


f

( a ,i )G

ai



f

( i , z )G


iz

0

Định nghĩa giá trị của luồng :
v( f ) 

f

( a ,i )G

ai

1.1.4. Luồng cực đại, lát cắt cực tiểu
Luồng cực đại
Cho mạng G(V,E,C) luồng f trong mạng G với v(f) có giá trị lớn nhất được gọi là luồng
cực đại trong mạng.
Lát cắt
Ta gọi lát cắt (S,T) là cách phân hoạch tập V của mạng ra thành hai tập S và T=V\S
Trong đó a  S; z  T
Khả năng thông qua của lát cắt (S,T) là : c( S , T) 

c

iS | jT

ij

Lát cắt cực tiếu là lát cắt có khả năng thơng qua nhỏ nhất.
Cho luồng f và lát cắt (S,T)

Kí hiệu : f ( S , T ) 

f

iS | jT

ij

Định lý 1
Cho mạng G(V,E,c) với nguồn a, đích z. f là luồng, (S,T) là lát cắt của G, khi đó:


- 11 v( f )  f (S , T )  f (T , S )

Chứng minh
Gán fij=0 cho các đỉnh i, j khơng kề nhau, ta có
v( f )   f ai   f ji   f ij
iV

jS iV

jS iV


 

   f ji   f ij     f ji   f ji 
jS iT
jS iT
 jS iS

  jS iS


 

   f ji   f ij     f ji   f ij 
jS iS
jS iT
 jS iS
  jS iT


 f



jS iS

ji

 f ij
jS iS

v( f )   f ji  f ij  f ( S , T )  f (T , S )

Suy ra

jS iT

jS iT


Định lý 2
Giá trị của mọi luồng f luôn nhỏ hơn hoặc bằng khả năng thông qua của lát cắt bất kỳ
trong mạng.
v( f )  c( S , T )

Chứng minh
Ta có:
v( f )  f ( S , T )  f (T , S )  f ( S , T )   f ji  c ji  c( S , T )
jS iT

jS iT

Định lý 3
Cho mạng G(V,E,c) khi đó:
(1) nếu v(f) = c(S,T) thì luồng f đạt giá trị cực đại và lát cắt (S,T) đạt giá trị cực tiểu.
(2) Đẳng thức v(f) = c(S,T) xảy ra khi chỉ khi
(i) f ij  cij ; (i, j )  ( S , T )
(ii) f ij  0; (i, j )  (T , S )
Chứng minh( suy ra từ định lý 2 )
1.1.5. Mạng tổng quát
Định nghĩa


- 12 Ta gọi mạng tổng quát là đồ thị có hướng G(V,E,c) thoả các điều kiện sau:
(1) Có duy nhất một đỉnh gọi là nguồn, không liên thuộc cung vào
(2) Có duy nhất một đỉnh gọi là đích, khơng liên thuộc cung ra
(3) Khả năng thông qua của cung : cij là các số không âm
(4)Khả năng thông qua của các đỉnh: ci là các số không âm
(5) Đồ thị liên thơng yếu

Ví dụ: Đồ thị trên hình 1.11 là mạng tổng quát.
5

2
12

b

c

3

5

a

5

z

4
4

7

7

d

6


e

Hình 1.11: Mạng tổng quát
Luồng tổng quát
Cho mạng G(V,E,C). Tập các giá trị f ij | (i, j)  G gọi là luồng tổng quát trên mạng G
nếu thoả:
(1) 0  f ij  cij , (i, j )  G
(2) k  a, z ;

f

( i , k )G

ik



f

( k , j )G

Giá trị của luồng tổng quát: v( f ) 

kj

 ck

f


( a ,i )G

ai

Lát cắt tổng quát
Tập X gồm một số cạnh và một số đỉnh gọi là lát cắt tổng quát của G nếu mọi đường đi
có hướng từ đỉnh nguồn đến đỉnh đích đều phải chứa ít nhất một phần tử của X.


- 13 1.1.6. Mạng với nhiều điểm phát và điểm thu
Xét mạng G với n điểm phát a1,a2,…..an và m điểm thu z1, z2, ……zm. Giả sử rằng có
thể đi từ một điểm phát bất kỳ đến tất cả các điểm thu. Bài tốn tìm luồng cực đại từ các
điểm phát đến các điểm thu có thể đưa về bài toán với một điểm phát và một điểm thu
bằng cách tạo ra một điểm phát giả a và một điểm thu giả z, các cạnh nối a với tất cả
các điểm phát và các cạnh nối các điểm thu với z.

a

a1

z1

a2

z2

a3

z


z3

Hình 1.12: Mạng với nhiều điểm phát, điểm thu
1.1.7. Biểu diễn đồ thị trên máy tính
1.1.7.1. Ma trận kề
Giả sử G = (V, E) là một đơn đồ thị có số đỉnh là n, khơng mất tính tổng qt có thể coi
các đỉnh được đánh số 1, 2, …, n. Khi đó ta có thể biểu diễn đồ thị bằng một ma trận
vng A = [aij] cấp n. Trong đó:
aij = 1 nếu (i, j)  E
aij = 0 nếu (i, j)  E
Quy ước aii = 0 với  i;
Đối với đa đồ thị thì việc biểu diễn cũng tương tự như trên, chỉ có điều nếu như (i, j) là
cạnh thì khơng phải ta ghi số 1 vào vị trí aij mà là ghi số cạnh nối giữa đỉnh i và đỉnh j.


- 14 -

Các tính chất của ma trận kề
Đối với đồ thị vơ hướng G, thì ma trận kề tương ứng là ma trận đối xứng (aij = aji), điều
này khơng đúng với đồ thị có hướng.
Nếu G là đồ thị vô hướng và A là ma trận kề tương ứng thì trên ma trận A:
Hình
Macột
trận
Tổng các số trên hàng i = Tổng
các1.13:
số trên
i =kềBậc của đỉnh i = deg(i)
Nếu G là đồ thị có hướng và A là ma trận kề tương ứng thì trên ma trận A:
Tổng các số trên hàng i = nửa bậc ra của đỉnh i = deg+(i)

Tổng các số trên cột i = nửa bậc vào của đỉnh i = deg-(i)
Trong trường hợp G là đơn đồ thị, ta có thể biểu diễn ma trận kề A tương ứng là các
phần tử logic.
aij = TRUE nếu (i, j)  E và aij = FALSE nếu (i, j)  E
Ưu điểm của ma trận kề
Đơn giản, trực quan, dễ cài đặt trên máy tính
Để kiểm tra xem hai đỉnh (u, v) của đồ thị có kề nhau hay không, ta chỉ việc kiểm tra
bằng một phép so sánh: auv ≠ 0.
Nhược điểm của ma trận kề
Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận kề ln ln địi hỏi n 2 ô nhớ để lưu
các phần tử ma trận, điều đó gây lãng phí bộ nhớ dẫn tới việc khơng thể biểu diễn được
đồ thị với số đỉnh lớn.
Với một đỉnh u bất kỳ của đồ thị, nhiều khi ta phải xét tất cả các đỉnh v khác kề với nó,
hoặc xét tất cả các cạnh liên thuộc với nó. Trên ma trận kề việc đó được thực hiện bằng
cách xét tất cả các đỉnh v và kiểm tra điều kiện auv ≠ 0. Như vậy, ngay cả khi đỉnh u là
đỉnh cô lập( không kề với đỉnh nào ) hoặc đỉnh treo( chỉ kề với 1 đỉnh ) ta cũng buộc
phải xét tất cả các đỉnh và kiểm tra điều kiện trên dẫn tới lãng phí thời gian.
1.1.7.2. Danh sách cạnh


- 15 Trong trường hợp đồ thị có n đỉnh, m cạnh, ta có thể biểu diễn đồ thị dưới dạng danh
sách cạnh bằng cách liệt kê tất cả các cạnh của đồ thị trong một danh sách, mỗi phần tử
của danh sách là một cặp (u, v) tương ứng với một cạnh của đồ thị. ( Trong trường hợp
đồ thị có hướng thì mỗi cặp (u, v) tương ứng với một cung, u là đỉnh đầu và v là đỉnh
cuối của cung ). Danh sách được lưu trong bộ nhớ dưới dạng mảng hoặc danh sách móc
nối. Ví dụ với đồ thị ở Hình 1.14 :

Hình 1.14: Minh hoạ đồ thị
Cài đặt trên mảng:


Cài đặt trên danh sách móc nối:

Hình 1.15: Cài đặt danh sách móc nối
Ưu điểm của danh sách cạnh
Trong trường hợp đồ thị thưa(có số cạnh tương đối nhỏ: chẳng hạn m < 6n), cách biểu
diễn bằng danh sách cạnh sẽ tiết kiệm được không gian lưu trữ, bởi nó chỉ cần 2m ơ
nhớ để lưu danh sách cạnh.
Trong một số trường hợp, ta phải xét tất cả các cạnh của đồ thị thì cài đặt trên danh sách
cạnh làm cho việc duyệt các cạnh dễ dàng hơn( Thuật toán Kruskal chẳng hạn ).


×