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.7 MB, 83 trang )

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

HỒ XUÂN BÌNH

THUẬT TOÁ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 toán song song ....................................................................................... 34
Chương 2 THUẬT TOÁN TÌM LUỒNG CỰC ĐẠI TRÊN MẠNG ....................... 38
2.1. Thuật toán truyền thống ...................................................................................... 39
2.2. Thuật toán hoán chuyển nguồn đích có trọng số tìm luồng cực đại ................... 43
2.3.Thuật toá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 toá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 toán song song .................................................... 47
Hình 2.3. Mô hình Client, Server ............................................................................... 48
Hình 2.4. Sơ đồ thuật toá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 toán học ngày một khẳng định hơn khi
có sự ra đời của bộ môn toá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 toá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 toá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 toá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 toá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 toán tìm luồng cực đại trên mạng.

-

Xây dựng thuật toá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 toán giải bài toá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 toán tìm luồng cực đại
trên mạng, thuật toá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 toán tìm luồng cực đại trên mạng
Phát biểu bài toán, trình bày thuật toán truyền thống, thuật toán hoán chuyển nguồn
đích, từ đó thiết kế thuật toá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 toá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 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ị đ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 toá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ó khuyên 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 quá 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 quá 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 quá 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 toá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 quát 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
vuông 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ề luôn luôn đò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 ).


×