i
..
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG
NƠNG THỊ LÝ
BÀI TỐN LUỒNG TRÊN MẠNG VÀ ỨNG DỤNG
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Thái nguyên - 2015
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
ii
LỜI CAM ĐOAN
“ Bài tốn
Tơi
luồng trên mạng và ứng dụng” là cơng trình nghiên cứu thực sự của
dƣới
thân
sự hƣớng dẫn khoa học của Tiến sĩ Trƣơng Hà Hải,Trƣờng Đại học Công
nghệ Thông tin và Truyền thông- Đại học Thái Nguyên.
Tôi
.
9 năm 2015
Nơng Thị Lý
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
iii
LỜI CẢM ƠN
Để hoàn thành luận văn, t
xin chân thành cảm ơn Trƣờng Đại học
Công nghệ Thông tin và Truyền thơng–Đại học Thái Ngun, Phịng Đào tạo,
các thầy, cơ giáo giảng dạy lớp cao học Khoa học máy tính K12E đã quan
tâm, tạo điều kiện thuận lợi, tận tình giảng dạy và giúp đỡ
trong thời
gian theo học tại trƣờng.
Đặc biệt, t
xin bày tỏ lòng biết ơn sâu sắc đến
TS.
Trƣơng Hà Hải
văn.
xin cảm ơn các cán bộ, giảng viên đồng nghiệp Trƣờng Đại
học Hùng Vƣơng đã
.
.
Xin trân trọng cảm ơn.
9năm 2015
Nông Thị Lý
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
iv
MỤC LỤC
LỜI CAM ĐOAN .......................................................................................................II
LỜI CẢM ƠN ........................................................................................................... III
MỤC LỤC ................................................................................................................ IV
DANH MỤC CÁC BẢNG ....................................................................................... VI
DANH MỤC CÁC HÌNH VẼ ................................................................................. VII
MỞ ĐẦU .................................................................................................................... 1
CHƢƠNG 1 ................................................................................................................ 3
MỘT SỐ KHÁI NIỆM CƠ BẢN CỦA LÝ THUYẾT ĐỒ THỊ................................ 3
1.1.
.............................................................................. 3
1.1.1.
Định nghĩa đồ thị .......................................................................................... 3
1.1.2.
Các loại đồ thị ............................................................................................... 4
1.1.3. Các khái niệm liên quan ................................................................................... 6
1.2. Biểu diễn đồ thị trên máy tính ........................................................................... 10
1.2.1.
Biểu diễn bằng ma trận kề .......................................................................... 10
1.2.2.
Biểu diễn bằng ma trận liên thuộc .............................................................. 11
1.2.3.
Danh sách cạnh ........................................................................................... 12
1.2.4.
Danh sách kề ............................................................................................... 13
1.2.5.
Đồ thị trọng số ............................................................................................ 14
1.3.
...................................................................... 14
1.3.1.
Các bài toán kinh điển ................................................................................ 14
1.3.2.
Các bài tốn NP-khó ................................................................................... 16
1.4. Kết luận chƣơng 1 ............................................................................................. 20
CHƢƠNG 2: BÀI TOÁN LUỒNG CỰC ĐẠI TRÊN MẠNGVÀ CÁC THUẬT
TỐN ....................................................................................................................... 22
2.1. Phát biểu bài tốn .............................................................................................. 22
2.1.1. Mạng và luồng trên mạng ............................................................................... 22
2.1.2. Bài toán luồng cực đại trên mạng ................................................................... 24
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
v
2.1.3. Lát cắt, định lý Ford – Fulkerson ................................................................... 24
2.2. Các thuật toán giải bài toán luồng trên mạng .................................................... 25
2.2.1. Các thuật tốn hiện có .................................................................................... 25
2.2.2. Thuật tốn Ford – Fulkerson .......................................................................... 26
2.2.3. Thuật toán Edmonds–Karp ............................................................................. 32
2.2.4. Thuật toán Dinits ............................................................................................ 32
2.2.5. Các thuật toán khác ........................................................................................ 33
2.3. Một số ứng dụng thực tế của bài toán ............................................................... 33
2.3.1. Bài tốn tìm cơng suất bơm dầu ..................................................................... 33
2.3.2. Bài tốn xét ứng cử viên vơ địch .................................................................... 34
2.3.3. Bài tốn tìm luồng giao thơng cực đại............................................................ 35
2.4. Kết luận chƣơng 2 ............................................................................................. 36
CHƢƠNG 3:
.................................................................................................................. 37
3.1. Vấn đề tính tốn số lƣợt du khách về thăm đền Hùng trong dịp lễ hội ............. 37
3.2.
............................................................................................... 39
3.3. M
............................. 40
3.4. Xây dựng chƣơng trình ...................................................................................... 50
3.4.1. Mơi trƣờng cài đặt .......................................................................................... 50
3.4.2. Giao diện chƣơng trình ................................................................................... 51
3.5. Kết quả thực nghiệm tính số lƣợt ngƣời về thăm đền Hùng năm 2015 ............ 52
3.5.1. Thực nghiệm 1: Tính tốn trong ngày thứ nhất (06/03 âm lịch) .................... 53
3.5.2. Thực nghiệm 2: Tính tốn trong ngày thứ hai (10/03 âm lịch) ...................... 56
3.5.3. Tổng hợp các kết quả thử nghiệm .................................................................. 59
3.6. Kết luận chƣơng 3 ............................................................................................. 60
KẾT LUẬN VÀ HƢỚNG NGHIÊN CỨU .............................................................. 61
TÀI LIỆU THAM KHẢO ........................................................................................ 63
PHỤ LỤC
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
vi
DANH MỤC CÁC BẢNG
Bảng 2.1. Các thuật toán giải bài toán luồng cực đại.................................... 31
Bảng 3.1. Bảng chỉ số các tỉnh thành trên bản đồ ......................................... 46
Bảng 3.2. So sánh kết quả tính tốn và dữ liệu thực tế ................................. 71
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
vii
DANH MỤC CÁC HÌNH VẼ
Hình 1.1. Bài tốn bảy cây cầu ở Konigsberg...............................................4
Hình 1.2. Các loại đồ thị ...............................................................................6
Hình 1.3. Các dạng đồ thị đặc biệt ................................................................7
Hình 1.4. Minh họa các khái niệm liên quan đến đồ thị ...............................7
Hình 1.5. Minh họa đỉnh rẽ nhánh và cầu .....................................................9
Hình 1.6. Minh họa đồ thị con và đồ thị đẳng cấu ..................................... 10
Hình 1.7. Biểu diễn đồ thị bằng ma trận kề ............................................... 11
Hình 1.8. Biểu diễn đồ thị bằng ma trận liên thuộc ................................... 12
Hình 1.9. Biểu diễn đồ thị bằng danh sách cạnh ........................................ 13
Hình 1.10. Biểu diễn đồ thị bằng danh sách kề.......................................... 14
Hình 2.1. Mạng và luồng trên mạng .......................................................... 23
Hình 2.2. Luồng cực đại trên mạng ............................................................ 24
Hình 2.3. Lát cắt hẹp nhất mạng ................................................................ 25
Hình 2.4 Mạng ban đầu .............................................................................. 28
Hình 2.5. Khởi tạo luồng bằng 0 ................................................................ 28
Hình 2.6. Xây dựng mạng cịn dƣ .............................................................. 29
Hình 2.7. Tăng luồng theo đƣờng
................................................... 29
Hình 2.8. Tăng luồng theo đƣờng
......................................................... 30
Hình 2.9. Tăng luồng theo đƣờng
......................................................... 30
Hình 2.10. Tính tốn luồng cực đại từ mạng đã tăng luồng cực đại .......... 31
Hình 2.11. Bài tốn tìm cơng suất bơm dầu ............................................... 33
Hình 2.12. Bài tốn loại bỏ ứng cử viên vơ địch ....................................... 34
Hình 2.13. Bài tốn tìm luồng giao thơng cực đại ........................................3
Hình 3.1. Bài tốn tính số lƣợt du khách tới thăm Đền Hùng - Phú Thọ .. 40
Hình 3.2. Mạng của bộ dữ liệu #1 .............................................................. 42
Hình 3.3.Khởi tạo luồng bằng 0 của bộ dữ liệu #1 .................................... 43
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
viii
Hình 3.4. Xây dựng mạng cịn dƣ của bộ dữ liệu #1 ................................. 43
Hình 3.5.Tăng luồng theo đƣờng
của bộ dữ liệu #1 ............................. 44
Hình 3.6. Tăng luồng theo đƣờng
của bộ dữ liệu #1 ............................ 44
Hình 3.7. Tăng luồng theo đƣờng
của bộ dữ liệu #1 ............................ 45
Hình 3.8. Tăng luồng theo đƣờng
của bộ dữ liệu #1 ....................... 45
Hình 3.9. Tăng luồng theo đƣờng
của bộ dữ liệu #1 ........................... 46
Hình3.10. Tăng luồng theo đƣờng
của bộ dữ liệu #1 ........................... 46
Hình 3.11. Tăng luồng theo đƣờng
của bộ dữ liệu #1 ......................... 47
Hình3.12. Luồng cực đại của bộ dữ liệu #1 ............................................... 47
Hình 3.13. Giao diện của chƣơng trình ...................................................... 49
Hình 3.14. Mơ phỏng với bộ dữ liệu #1 trên chƣơng trình ........................ 52
Hình 3.15. Chạy chƣơng trình với bộ dữ liệu #1 ....................................... 53
Hình 3.16. Chạy chƣơng trình với bộ dữ liệu #2 ....................................... 56
Hình 3.17. Biểu đồ so sánh kết quả tính tốn và dữ liệu thực tế ............... 57
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
MỞ ĐẦU
Để giải quyết các vấn đề phát sinh từ các bài tốn thực tế cần có đƣợc sự
hợp tác chặt chẽ giữa các chuyên gia trong lĩnh vực chuyên mơn, các chun
gia Tốn, Tốn ứng dụng và các chun gia Tin học, kỹ sƣ lập trình. Điều này
đặc biệt cần thiết khi giải quyết các bài toán cho các hệ thống lớn. Việc thiết
lập đƣợc một mơ hình hợp lý, phản ánh đƣợc bản chất của bài toán thực tế
đồng thời khả thi về phƣơng diện tính tốn ln là điều đáng đƣợc quan tâm.
Trong số các mơ hình tốn học đã đƣợc áp dụng có nhiều mơ hình tối ƣu,
nhiều bài tốn qui hoạch tuyến tính có thể qui về bài tốn làm cực tiểu cƣớc
phí vận chuyển hàng trong một mạng (gồm các nút và các cung đƣờng) sao
cho đảm bảo đƣợc các nhu cầu ở một số nút sau khi biết nguồn cung cấp tại
một số nút khác, hoặc đƣa về bài toán xác định cƣờng độ dò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 tốn tìm luồng dầu
lớn nhất có thể bơm từ tàu chở dầu vào bể chứa của một hệ thống đƣờng ống
dẫn dầu,.... Các bài toán nhƣ vậy đƣợc gọi là các bài toán luồng trên mạng
hay bài toán chuyển vận (TransShipment Problem). Đây là lớp bài toán quan
trọng nhất và hay gặp nhất trong qui hoạch toán học. Lớp này bao gồm các
bài toán quen thuộc trong thực tế nhƣ: Bài toán vận tải, bài tốn mạng điện,
bài tốn mạng giao thơng, bài toán quản lý, bài toán phân bổ vật tƣ, bài tốn
kế hoạch tài chính, bài tốn đƣờng ngắn nhất, bài tốn luồng lớn nhất.
Vì là một bài tốn qui hoạch tuyến tính nên các bài tốn luồng trên mạng
có thể giải đƣợc bằng bất kỳ thuật toán nào giải đƣợc bài tốn qui hoạch tuyến
tính, chẳng hạn bằng thuật tốn cổ điển của qui hoạch tuyến tính nhƣ thuật
tốn đơn hình. Mặt khác, bằng cách tận dụng những cấu trúc đặc biệt của các
bài tốn luồng trên mạng thơng qua việc mơ hình hóa bài tốn thành cấu trúc
đồ thị (mơ hình gồm các đỉnh và các cạnh nối các đỉnh đó) thì bài tốn trên
bài tốn tìm luồng trên mạng của một đồ thị.
2
Vì những ứng dụng thực tế rất ý nghĩa của lớp bài toán này, cùng với thế
mạnh và niềm yêu thích về tốn học, tin học, thuật tốn, trong phạm vi luận
văn,
tập trung nghiên cứu về lớp bài toán luồng trên mạng, phƣơng
pháp giải bài toán luồng trên mạng bằng lý thuyết đồ thị và ứng dụng giải bài
toán trong thực tế.
Luận văn đƣợc trình bày thành 3 phần bao gồm: Phần mở đầu, phần nội
dung và phần kết luận.
Phần mở đầu:
Giới thiệu khái quát về đề tài, mục tiêu, đối tƣợng, phạm vi nghiên cứu,
ý nghĩa khoa học và xã hội mang lại thông qua việc giải quyết các vấn đề
đƣợc nêu trong đề tài.
Phần nội dung:
Chƣơng 1:
:đ
3.
Chƣơng 2:
rình bày khái niệm mạng, khái niệm luồng trên
mạng, bài toán luồng cực đại trên mạng, phát biểu các dạng bài tốn luồng
cực đại trên mạng, trình bày
thuật tốn giải bài tốn luồng trên mạng.
Chƣơng 3. Tìm hiểu
thực tế
lƣu lƣợng du khách về thăm
đền Hùng tỉnh Phú Thọ trong dịp lễ hội thuộc lớp bài toán luồng cực đại trên
mạng, xây dựng chƣơng trình thử nghiệm mơ phỏng tính tốn số lƣợt du
khách về thăm đền Hùng tỉnh Phú Thọ trong dịp lễ hội năm 2015.
Phần kết luận: Trình bày kết quả mà luận văn đạt đƣợc và hƣớng phát
triển cho mơ hình mà luận văn đã đề xuất.
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
3
CHƢƠNG 1
MỘT SỐ 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ỷ XVIII bởi nhà toán học lỗi lạc ngƣời Thụy sỹ
Leonhard Euler. Nội dung cơ bản của chƣơng
. Chƣơng 1 là cơ sở lý thuyết làm tiền
đề để trình bày các nội dung trong chƣơng 2 và chƣơng 3.
1.1. Một số
1.1.1. Định nghĩa đồ thị
G = (V,E)
(Verterx), E
V
(Edge). [1]
Ví dụ, một bản đồ địa lý có thể mơ hình hóa thành một đồ thị bằng cách
biểu diễn các địa điểm định trƣớc bằng đỉnh và con đƣờng nối giữa các địa
điểm đó bằng cạnh. Lý thuyết đồ thị có nhiều ứng dụng quan trọng trong cuộc
sống, đƣợc phát triển trong khoảng 4 thế kỉ gần đây. Có hai bài tốn nổi tiếng
đƣợc nhiều ngƣời biết đến nhƣ là các bài toán khai sinh ra lý thuyết đồ thị
:
chu
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
4
Hình 1.1. Bài tốn bảy cây cầu ở Konigsberg
Bài tốn 1: Bài tốn bảy cây cầu của Euler, cịn gọi là Bảy cầu ở
Konigsberg. Nguồn gốc bài toán là từ thành phố Konigsberg, Đức (nay là
Kaliningrad, Nga) nằm trên sông Pregel, bao gồm hai hòn đảo lớn nối với
nhau và với đất liền bởi bảy cây cầu. Bài toán đặt ra là
một tuyến đƣờng
mà đi qua mỗi cây cầu một lần và chỉ đúng một lần (bất kể điểm xuất phát hay
điểm tới). Năm 1736, Leonhard Euler đã chứng minh rằng điều đó là khơng
thể đƣợc.
Bài tốn 2: Vấn đề này lần đầu tiên đƣợc đề cập vào năm 1852 bởi
Francis Guthrie khi ông thử tô màu bản đồ nƣớc Anh và ông nhận ra rằng chỉ
cần bốn màu khác nhau là đủ. Ông đã đem vấn đề này hỏi ngƣời anh trai là
Fredrick, lúc đó đang là sinh viên của trƣờng Đại học Học viện London
(UCL). Fredrick đã đƣa vấn đề này hỏi thầy của mình là nhà tốn học
Augustus De Morgan nhƣng ngƣời thầy cũng chƣa biết rõ vấn đề này. Ngƣời
đầu tiên giới thiệu vấn đề ra trƣớc cơng chúng là nhà tốn học Arthur Cayley
vào năm 1878 tại Hội Tốn học London, ơng đã chỉ ra ngƣời đề cập vấn đề là
De Morgan.
1.1.2. Các loại đồ thị
Chúng ta sẽ dựa vào các đặc điểm sau của cạnh để phân biệt các dạng đồ thị:
-
Cạnh e1 = (u, v) và cạnhe2 = (t, k) trên đồ thị Gđƣợc gọi là cạnh lặp nếu
u t và v k.
-
Các cạnhe E đƣợc gọi là có hƣớng nếu trên đồ thị G ta quan tâm tới
thứ tự hai đỉnh trên một cạnh: phân biệt hai cạnhe1 = (u, v) và e2 = (v,u).
Từ đó ta có các dạng đồ thị cơ bản:
Tồn tại cạnh lặp
Số hóa bởi Trung tâm Học liệu - ĐHTN
Không tồn tại cạnh lặp
/>
5
Đa đồ thị có hƣớng
Đơn đồ thị có hƣớng
Cạnh vơ hƣớng Đa đồ thị vô hƣớng
Đơn đồ thị vô hƣớng
Cạnh có hƣớng
Ta có hình minh họa các loại đồ thị trên.
2
4
2
6
1
3
5
3
5
Đơn đồ thị vơ hƣớng
4
2
6
1
3
6
1
Đơn đồ thị có hƣớng
2
4
4
6
1
5
3
Đa đồ thị có hƣớng
5
Đa đồ thị vơ hƣớng
Hình 1.2. Các loại đồ thị
Một số dạng đơn đồ thị vô hƣớng đặc biệt:
Đồ thị đầy đủ Kn (compelte graph): Là đơn đồ thị vơ hƣớng mà giữa
hai đỉnh bất kì của nó ln tồn tại cạnh nối.
Đồ thị vịng Cn (cycle graph): Là đơn đồ thị vô hƣớng G = (V,E) với
tập đỉnh
và tập cạnh
.
Đồ thị bánh xe Wn (wheel graph): là đơn đồ thị vô hƣớng thu đƣợc từ
đồ thị Cn-1 bằng cách thêm một đỉnhn nối với n-1 đỉnh của đồ thị Cn-1.
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
6
Đồ thị hai phíaKm,n (bipartite graph): là đồ thị có tập đỉnh phân hoạch
thành hai tập con không giao nhau V=X Y sao cho mọi cạnh thuộc
đều
nối một đỉnh thuộc X với một đỉnh thuộc Y.
Hình 1.3. Các dạng đồ thị đặc biệt
1.1.3. Các khái niệm liên quan
Cho đồ thị G=(V, E): V={1, 2, 3, …, n} vàE={e1, e2,…, en}.
Các khái niệm đƣợc trình bày dƣới đây có thể dùng cho cả đồ thị có hƣớng
và vơ hƣớng hoặc từng dạng đồ thị cụ thể.
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
7
2
4
b
6
1
3
c
f
a
5
d
e
Hình 1.4. Minh họa các khái niệm liên quan đến đồ thị
Cạnh (edge)
Nếu (u, v) là một cặp đỉnh thuộc E thì nói có một cạnh nốiu và v. Khi
đóv đƣợc gọi là kề của u.
Bậc của đỉnh
Gọi bậc của đỉnh trong đồ thị vô hƣớng là số cạnh liên thuộc với nó và
kí hiệu làdeg(v).
Bán bậc của đỉnh
Gọi bán bậc ra (vào) của đỉnh trong đồ thị có hƣớng là số cạnh của đồ
thị đi ra (vào) đỉnh đó và kí hiệu là deg+(v) hay deg-(v).Ví dụ trong hình
1.4đỉnh2 củaG1có bán bậc vào là 1:hay deg--(2)=1và bán bậc ra là 2:deg2(2)=2.
Đƣờng đi (path)
Một đƣờng đi từ đỉnh u đến đỉnh v trên đồ thị G là một dãy đỉnhu1, u2,
…, ui, v mà các cạnh(u, u1), (u1, u2), …, (ui, v)E, i là số lƣợng cung trên
đƣờng đi đƣợc gọi là độ dài của đƣờng đi.
Đƣờng đi đơn
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
8
Một đƣờng đi đơn trên đồ thị là một đƣờng đi mà trên đó khơng có
cạnh nào lặp lại.
Chu trình (cycle)
Một chu trình trên đồ thị G là một đƣờng đi đơn có đỉnh đầu và đỉnh
cuối trùng nhau.
Ví dụ trong hình 1.4 trên G2 ta có:
- Đƣờng đi: abcfebc
- Đƣờng đi đơn: abcfeb
- Chu trình: bcfeb.
Hai đỉnh liên thơng
Đỉnhp vàq đƣợc gọi là liên thông với nhau trên đồ thịG nếu có một
đƣờng đi từp đếnq trên đồ thị đó.
Đồ thị liên thơng
Một đồ thị đƣợc gọi là liên thông nếu mọi cặp đỉnh của đồ thị đều liên
thông.
Thành phần liên thông
Đồ thịG không liên thông sẽ phân rã thành một số hữu hạn đồ thị con
liên thông đôi một khơng có đỉnh chung. Các đồ thị con này đƣợc gọi là các
thành phần liên thông của đồ thị.
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
9
b
c
f
a
g
e
d
h
Hình 1.5. Minh họa đỉnh rẽ nhánh và cầu
Đỉnh rẽ nhánh
Đỉnhu đƣợc gọi là đỉnh rẽ nhánh của đồ thịG nếu việc loại bỏ đỉnh đó
cùng các cạnh liên thuộc với nó làm tăng số thành phần liên thơng của đồ thị.
Cầu
Cạnhe đƣợc gọi là cầu của đồ thịG nếu việc loại bỏ cạnh đó làm tăng
số thành phần liên thơng của đồ thị.
2
4
a
b
c
d
e
f
6
1
5
3
Hình 1.6. Minh họa đồ thị con và đồ thị đẳng cấu
Đồ thị con
Đồ thị H=(W, F) đƣợc gọi là đồ thị con của đồ thị G = (V,E) nếu W
V và F E
Đồ thị đẳng cấu
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
10
Hai đồ thịG1= (U1, V1) và G2=(U2, V2) đƣợc gọi là đồng cấu nếu tồn tại
một song ánh f:V1 V2 sao cho (u, v) E1 khi và chỉ khi (f(u), f(v)) E2.
1.2. Biểu diễn đồ thị trên máy tính
1.2.1. Biểu diễn bằng ma trận kề
Cách biểu diễn đồ thị bằng ma trận kề:
- Đánh số các đỉnh thuộc V từ 1n.
-
Ma trận kề A biểu diễnG là một ma trận vng n n có các phần tử
nhận giá trị0 hoặc 1: aij =1 nếu tồn tại một cung định hƣớng từ vi đến vj.
Ta có Hình 1.7 minh họa biểu diễn đồ thị có hƣớng có trọng số bằng ma
trận kề.
6
2
4
6
5
3
6
1
3
6
5
3
1
1
2
3
4
5
6
5
1
2
5
3
5
4
5
6
3
3
1
6
6
6
Hình 1.7. Biểu diễn đồ thị bằng ma trận kề
Chúng ta có các nhận xét:
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
11
-
Cách biểu diễn bằng ma trận kề có thể dùng cho cả đồ thị có hƣớng và
vơ hƣớng. Dễ thấy ma trận biểu diễn đồ thị vô hƣớng đối xứng qua đƣờng
chéo chính.
-
Nếu đồ thị là có trọng số thì các phần tử ma trận kề có thể nhận giá trị
là trọng số của cung.
-
Có thể lựa chọn hai giá trị
và
để phân biệt sự khác nhau giữa cặp
đỉnh có cạnh nối và cặp đỉnh khơng có cạnh nối. Trong thực tế cài đặt, tùy
thuộc vào thuật tốn mà có thể sử dụng các bộ giá trị khác vẫn đảm bảo sự
phân biệt.
- Ƣu điểm: tốc độ truy xuất thông tin về cạnh cao.
- Nhƣợc điểm:
Đồ thị thƣa có hiệu suất sử dụng tài nguyên thấp.
Tình huống cập nhật đồ thị bằng thao tác thay đổi kích thƣớc tập đỉnh
rất phức tạp: buộc phải khai báo một ma trận với kích thƣớc mới và hủy bỏ
ma trận đã sử dụng ban đầu.
1.2.2. Biểu diễn bằng ma trận liên thuộc
Cách biểu diễn đồ thị bằng ma trận liên thuộc:
- Đánh số các đỉnh thuộc V từ1n.
- Đánh số các cạnh thuộc E từ 1m.
- Ma trận liên thuộc A biểu diễn G là một ma trận nm có các phần tử
nhận giá trị 0, 1 hoặc -1:
aij = 1 nếu đỉnh i là đỉnh đầu của cạnh ej.
aij = -1 nếu đỉnhi là đỉnh cuối của cạnh ej.
aij = 0 nếu đỉnhi không là đầu mút của cạnh ej.
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
12
b
2
4
c
a
d
6
1
e
f
h
3
1
2
3
4
5
6
a
1
-1
b
c
1
-1
5
g
d
e
f
1
g
1
-1
-1
1
h
1
1
-1
-1
-1
1
-1
Hình 1.8. Biểu diễn đồ thị bằng ma trận liên thuộc
Hình 1.8 minh họa biểu diễn đồ thị có hƣớng khơng có trọng số bằng
ma trận liên thuộc. Chúng ta có các nhận xét:
- Ma trận liên thuộc chủ yếu dùng biểu diễn đồ thị có hƣớng.
- Có thể lựa chọn ba giá trị 0, 1 và -1 để phân biệt sự khác nhau giữa đỉnh
i và cạnhej. Trong thực tế cài đặt, tùy thuộc vào thuật tốn mà có thể sử
dụng các bộ giá trị khác vẫn đảm bảo sự phân biệt.
1.2.3. Danh sách cạnh
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
13
b
2
4
c
a
d
6
1
e
f
h
3
5
g
a
b
c
d
e
f
g
h
i
1
2
4
2
3
1
3
5
j
2
4
6
5
4
3
5
6
Hình 1.9. Biểu diễn đồ thị bằng danh sách cạnh
Cách biểu diễn đồ thị bằng danh sách cạnh:
- Đánh số các đỉnh thuộc V từ 1n.
- Đánh số các cạnh thuộc E từ 1m.
-
Thực hiện lƣu trữ đồ thị G bằng cách lƣu trữ thông tin về các cạnh:
đỉnh đầu, đỉnh cuối và trọng số (nếu có).
1.2.4. Danh sách kề
Cách biểu diễn đồ thị bằng danh sách kề
- Đánh số các đỉnh thuộc V từ 1n.
- Danh sách L biểu diễn G là một tập gồm n danh sách liên kết.
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
14
b
2
4
c
a
d
6
1
e
f
h
3
5
g
1
2
3
4
5
6
→
→
→
→
→
→
2
4
4
6
6
3
5
5
Hình 1.10. Biểu diễn đồ thị bằng danh sách kề
-
Danh sách thứ i trong L chứa các đỉnh kề với đỉnh i của đồ thị.
Nhận xét:
-
Đối với đồ thị vô hƣớng, khi cài đặt nên lƣu trữ danh sách theo qui
cách: các đỉnh trong danh sách sẽ có số thứ tự lớn hơn đỉnh tƣơng ứng với
danh sách đó. Qui cách này sẽ giúp đảm bảo việc số ô nhớ dùng để lƣu trữ
đúng bằng số cạnh của đồ thị mà không bị mất mát thông tin.
1.2.5. Đồ thị trọng số
Ma trận trọng số là đƣợc dùng để biểu diễn đồ thị.
Xét đồ thị G=(X, U) (có hƣớng hay vơ hƣớng)
Giả sử tập X gồm n đỉnh và đƣợc sắp thứ tự X={x1, x2, ..., xn}, tập U
gồm n cạnh và đƣợc sắp thứ tự U={u1, u2, ..., un}.
1.3. Một số bài toán
trên đồ thị
1.3.1. Các bài toán kinh điển
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
15
Bài toán duyệt đồ thị
Bài toán duyệt đồ thị đƣợc phát biểu nhƣ sau:
Cho đồ thị G=(V, E). Hãy duyệt tất cả các đỉnh của G, mỗi đỉnh đúng
một lần.
Hiện có hai thuật tốn kinh điển giải quyết bài tốn này: thuật tốn tìm
kiếm theo chiều sâu (Depth First Search) và thuật tốn tìm kiếm theo chiều
rộng (Breadth First Search). Cả hai thuật tốn đều có độ phức tạp O(|V|+|E|).
Bài toán cây khung nhỏ nhất
Trƣớc hết đến với khái niệm về cây khung. Cho đồ thị vô hƣớng
G=(V,E). Cây T=(V, F) đƣợc gọi là cây khung của đồ thị nếu nó là đồ thị con
của G, tức là FE. Trọng số của cây khung T đƣợc định nghĩa là:
(1)
Từ đó ta có bài tốn cây khung nhỏ nhất:
Cho đồ thị vô hƣớng G=(V, E) với trọng số của cạnh e là c(e). Hãy tìm
cây khung T của đồ thị có trọng số nhỏ nhất.
Hiện có hai thuật tốn kinh điển giải quyết bài toán này: thuật toán
Kruskal hữu hiệu với những đồ thị thƣa tức là:
và thuật toán Prim hữu hiệu với những đồ thị dày.
Bài tốn tìm đƣờng đi ngắn nhất
Bài tốn đặt ra ở đây là tìm đƣờng đi ngắn nhất, tức đƣờng đi có tổng
trọng số nhỏ nhất, trên đồ thị có trọng số cho trƣớc. Chúng ta có ba thuật tốn
kinh điển giải các bài tốn này:
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
16
- Thuật tốn Ford Bellman tìm đƣờng đi ngắn nhất từ đỉnh s đến tất cả
các đỉnh còn lại trên đồ thị có hƣớng khơng có chu trình âm (tức chu trình có
tổng trọng số trên các cạnh là âm).
- Thuật tốn Dijkstra tìm đƣờng đi ngắn nhất từ đỉnh s đến tất cả các
đỉnh còn lại trên đồ thị vơ hƣớng có trọng số khơng âm.
- Thuật tốn Floyd tìm đƣờng đi ngắn nhất giữa tất cả các cặp đỉnh trên
đồ thị có trọng số.
Bài tốn ghép cặp
Trƣớc hết có khái niệm phép ghép cặp. Cho đồ thị G=(V, E). Phép
ghép cặpM là một phép chọn ra một tập FE sao cho khơng có hai cạnh nào
có chung đầu mút. Khi đó, số lƣợng cạnh trong Fđƣợc gọi là kích thƣớc của
cặp ghép M. Bài tốn ghép cặp đƣợc trình bày nhƣ sau.
Cho đồ thị G=(V, E). Hãy tìm cặp ghép M có kích thƣớc lớn nhất.
Hiện tại, bài tốn ghép cặp trên đồ thị hai phía đã có thuật toán hữu
hiệu để giải quyết. Với đồ thị tổng qt, chúng ta đã có đƣợc các thuật tốn
xấp xỉ hiệu quả để giải quyết.
1.3.2. Các bài tốn NP-khó
Là nhóm các bài tốn khơng có giải thuật hữu hiệu, tức giải thuật có độ
phức tạp tính tốn là đa thức theo thời gian, để giải quyết.
Bài tốn hồn thiện đồ thị Hamilton
Trƣớc hết có khái niệm đƣờng đi và chu trình Hamilton. Cho đồ thị
G=(V, E). Đƣờng đi đi qua tất cả các đỉnh của , mỗi đỉnh đúng một lần đƣợc
gọi là đƣờng đi Hamilton. Đƣờng đi Hamilton có đỉnh đầu trùng đỉnh cuối gọi
là chu trình Hamilton. Khi đó, một đồ thị có chứa chu trình Hamilton sẽ đƣợc
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>
17
gọi là đồ thị Hamilton. Bài tốn hồn thiện đồ thị Hamilton (Hamilton
Completion Problem) đặt ra nhƣ sau.
Cho đồ thị G=(V, E). Hãy tìm số cạnh ít nhất bổ sung vào G để G
trởthành đồ thị Hamilton.
Bài toán ngƣời du lịch
Bài toán ngƣời du lịch (Travelling Salesman Problem) đƣợc phát biểu
nhƣ sau.
Cho đồ thị có trọng số G=(V, E). Hãy tìm chu trình đi qua tất cả các
đỉnh của đồ thị với trọng số nhỏ nhất.
Bài toán số phủ đồ thị con hai phía đầy đủ
Một đồ thị hai phía đầy đủ là một đồ thị G=(V, E) trong đó V=XY và
với mọi cặp đỉnh x X, y Y thì(x, y E. Khi đó, bài tốn số phủ đồ thị con
hai phía đầy đủ (Biclique Cover Number Problem) đƣợc phát biểu nhƣ sau:
Cho đồ thị vô hƣớngG=(V, E). Hãy tìm số nhỏ nhất các đồ thị con hai
phía đầy đủ của G sao cho mỗi cạnh của G đều nằm trong ít nhất 1 đồ thị con.
Bài tốn quyết định ghép cặp 3 chiều
Cho ba tập giao nhau bằng rỗng X, Y và Z. Xét tập T= X Y Z gồm
các bộ ba t=(x, y, z) trong đó x X, y Y, z Z. Khi đó, MT đƣợc gọi là
một phép ghép cặp 3 chiều nếu với mỗi 2 bộ m1 = (x1, y1, z1) và m2= (x2, y2,
z2) thuộc M, ta ln có: x1x2, y1y2, z1z2. Bài toán ghép cặp 3 chiều (3Dimensional Matching Decision Problem) đƣợc phát biểu nhƣ sau:
Cho tập T và một số nguyên k. Hỏi có tồn tại phép ghép cặp 3 chiều
MT nào có kích thƣớc lớn hơn k hay khơng?
Bài tốn quyết định tìm nhóm
Số hóa bởi Trung tâm Học liệu - ĐHTN
/>