Tải bản đầy đủ

Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế

i

ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

VŨ MINH TIỆP

BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ,
ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TRONG THỰC TẾ

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Thái Nguyên - 2015


ii

ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

VŨ MINH TIỆP


BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ,
ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TRONG THỰC TẾ

Chuyên ngành: Khoa học máy tính
Mã số: 60 48 01

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

NGƢỜI HƢỚNG DẪN KHOA HỌC: TS. Trƣơng Hà Hải

Thái Nguyên - 2015


iii

LỜI CAM ĐOAN

Em xin cam đoan: Luận v n th c s Khoa học máy tính “ Bài toán tìm bộ
ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế” này
là công trình nghiên cứu thực sự của cá nhân em, đƣợc thực hiện trên cơ sở
nghiên cứu lý thuyết và dƣới 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.
Em xin chịu trách nhiệm về lời cam đoan này.
Thái Nguyên, ngày

tháng

Tác giả

Vũ Minh Tiệp

n m 2015


iv

LỜI CẢM ƠN

Để hoàn thành luận v n, em xin chân thành cảm ơn Trƣờng Đ i học

Công nghệ Thông tin và Truyền thông, 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 đỡ em trong thời gian theo học t i
trƣờng.
Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc đến TS. Trƣơng Hà Hải,
ngƣời đã dành nhiều thời gian, tâm huyết hƣớng dẫn em trong suốt quá trình
nghiên cứu và hoàn thành luận v n.
Em cũng xin cảm ơn các cán bộ, giảng viên đồng nghiệp ở Trƣờng
Trung Cấp Kỹ Thuật V nh Phúc đã t o điều kiện về thời gian để em có thể
học tập và hoàn thành luận v n.
Mặc d đã cố gắng hết sức hoàn thiện luận v n, tuy nhiên chắc chắn vẫn
còn nhiều thiếu s t, rất mong sự g p qu báu của quý thầy cô và các b n.
Xin trân trọng cảm ơn.
u n n

t n

n m

Tác giả

Vũ Minh Tiệp

5


v

MỤC LỤC
Đặt vấn đề....................................................................................................................1
CHƢƠNG 1. CƠ SỞ LÝ THUYẾT VỀ ĐỒ THỊ VÀ ĐỘ PHỨC TẠP THUẬT
TOÁN ..........................................................................................................................4
1.1 CÁC KHÁI NIỆM CƠ BẢN ................................................................................4
1.1.1 Khái niệm đồ thị ................................................................................................4
1.1.2 Các lo i đồ thị ....................................................................................................5
1.1.3 Biểu diễn đồ thị ................................................................................................11
1.2 ĐỘ PHỨC TẠP TÍNH TOÁN VÀ TÍNH HIỆU QUẢ CỦA THUẬT TOÁN ..16
1.2.1 Định ngh a thuật toán ......................................................................................16
1.2.2 Phân tích độ phức t p của thuật toán ..............................................................17
1.2.3 Tối ƣu thuật toán ..............................................................................................18
1.3 MỘT SỐ THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ .....................................19
1.3.1 Thuật toán tìm kiếm theo chiều sâu (DEPTH FIRST SEARCH) ....................19
1.3.2 Thuật toán tìm kiếm theo chiều rộng (BREADTH FIRST SEARCH) ............21
CHƢƠNG 2. BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ VÀ CÁC
THUẬT TOÁN .........................................................................................................24
2.1 ĐỒ THỊ HAI PHÍA .............................................................................................24
2.1.1 Định ngh a ........................................................................................................24
2.1.2 Các bài toán trên đồ thị hai phía ......................................................................26
2.2 BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA .................26
2.2.1 Bài toán ghép đôi không trọng và các khái niệm .............................................26
2.2.2 Thuật toán đƣờng mở ......................................................................................28
2.2.3 Độ phức t p của thuật toán...............................................................................29
2.3 BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI VỚI TỔNG TRỌNG SỐ CỰC ĐẠI
HOẶC CỰC TIỂU TRÊN ĐỒ THỊ HAI PHÍA .......................................................29
2.3.1 Bài toán phân công ...........................................................................................29
2.3.2 Thuật toán tìm cặp ghép với tổng trọng số trên các c nh là lớn nhất hoặc nhỏ
nhất ............................................................................................................................30
2.3.3 Thuật toán Hung-ga-ri ......................................................................................33


vi

2.3.4 Phƣơng pháp đối ngẫu Kuhn-Munkres ............................................................37
2.3.5 Đánh giá độ phức t p và cải tiến thuật toán .....................................................39
2.4 BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ TỔNG QUÁT............42
2.4.1 Các khái niệm ...................................................................................................42
2.4.2 Thuật toán Edmonds (1965) .............................................................................44
2.4.3 Thuật toán Lawler (1973).................................................................................46
CHƢƠNG 3. MỘT SỐ BÀI TOÁN ỨNG DỤNG TRONG THỰC TẾ ..................50
3.1 BÀI TOÁN ĐIỀU HÀNH TAXI ........................................................................50
3.1.1 Phát biểu bài toán .............................................................................................50
3.1.2 Phân tích bài toán và xây dựng thuật toán .......................................................50
3.2 BÀI TOÁN XẾP LỚP HỌC THEO TÍN CHỈ ....................................................60
3.2.1 Mô hình đào t o theo học chế tín chỉ ...............................................................60
3.2.2 Phát biểu bài toán .............................................................................................61
3.2.3 Phân tích bài toán và xây dựng thuật toán .......................................................62
TÀI LIỆU THAM KHẢO .........................................................................................73


vii

DANH MỤC C C H NH V
Hình 1: Ví dụ về mô hình đồ thị ....................................................................... 4
Hình 2: Đơn đồ thị vô hƣớng và không phải đơn đồ thị vô hƣớng................... 5
Hình 3: Đa đồ thị vô hƣớng .............................................................................. 6
Hình 4: Đơn đồ thị c hƣớng và không phải đơn đồ thị c hƣớng ................... 7
Hình 5: Đa đồ thị c hƣớng ............................................................................... 8
Hình 6: Đơn đồ thị vô hƣớng ............................................................................ 9
Hình 7: Đồ thị c hƣớng.................................................................................. 10
Hình 8: Ví dụ biểu diễn đồ thị danh sách c nh ............................................... 12
Hình 9: Ví dụ biểu diễn đồ thị danh sách liền kề ............................................ 13
Hình 10: Ví dụ biểu diễn đồ thị ma trận kề ..................................................... 14
Hình 11: Ví dụ biểu diễn đồ thị ma trận liên thuộc ........................................ 16
Hình 12: Quá trình tìm kiếm theo chiều sâu ................................................... 20
Hình 13: Cây BFS ........................................................................................... 21
Hình 14: Quá trình tìm kiếm theo chiều rộng ................................................. 23
Hình 15: Ví dụ về đồ thị hai phía và không phải là đồ thị hai phía ................ 24
Hình 16: Đồ thị hai phía .................................................................................. 28
Hình 17: Ví dụ bài toán tìm bộ ghép cực đ i trên đồ thị ................................ 43
Hình 18: Phép chập Blossom .......................................................................... 45
Hình 19: Nở Blossom để dò đƣờng xuyên qua Blossom ................................ 46


1

Đặt vấn đề
Ngày nay việc giải quyết các bài toán lớn cho hệ thống đòi hỏi sự hợp
tác chặt chẽ giữa các chuyên gia trong các l nh vực chuyên môn, nhƣ các
chuyên gia Toán, Toán ứng dụng và các chuyên gia Tin học, kỹ sƣ lập trình.
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 toán luôn là điều đáng đƣợc
quan tâm.
Đặc biệt trong các chuyên ngành liên quan thì toán học là chuyên
ngành rất đƣợc quan tâm, một trong số đ là L thuyết đồ thị. Đồ thị biểu diễn
đƣợc rất nhiều cấu trúc, nhiều bài toán thực tế có thể đƣợc biểu diễn bằng đồ
thị. Ví dụ, cấu trúc liên kết của một website có thể đƣợc biểu diễn bằng một
đồ thị c hƣớng nhƣ sau: các đỉnh là các trang web hiện có t i website, tồn t i
một c nh c hƣớng nối từ trang A tới trang B khi và chỉ khi A có chứa 1 liên
kết tới B. Do vậy, sự phát triển của các thuật toán xử l đồ thị là một trong
các mối quan tâm chính của khoa học máy tính.
Mặc dù Lý thuyết đồ thị đã đƣợc khoa học phát triển từ rất lâu nhƣng l i
có nhiều ứng dụng hiện đ i, đặc biệt là các thuật toán trên đồ thị đã có nhiều
ứng dụng trong nhiều l nh vực khác nhau nhƣ: M ng máy tính, Lý thuyết mã,
Tối ƣu hoá, Kinh tế học ...Những

tƣởng cơ bản của lý thuyết đồ thị đƣợc

nhà toán học Thụy s Leonhard Euler đƣa ra từ thế kỷ 18. Ông đã d ng l
thuyết đồ thị để giải quyết bài toán cầu Konigsberg nổi tiếng.
Đồ thị cũng đƣợc d ng để giải nhiều bài toán thuộc những l nh vực rất
khác nhau nhƣ: ngƣời ta có thể dùng đồ thị để biểu diễn sự c nh tranh của các
loài trong môi trƣờng sinh thái, dùng đồ thị biểu diễn ai có ảnh hƣởng đến ai
trong một tổ chức nào đ và cũng c thể dùng đồ thị để giải các bài toán nhƣ
bài toán tính số các tổ hợp khác nhau của các chuyến xe giữa hai thành phố
trong một m ng giao thông, bài toán đi tham quan tất cả các phố của một


2

thành phố sao cho mỗi phố đi qua đúng một lần, hay bài toán tìm số màu cần
thiết để tô các vùng khác nhau của một bản đồ,...Đồ thị với các trọng số đƣợc
gán cho các c nh của nó có thể d ng để giải các bài toán nhƣ bài toán tìm
đƣờng đi ngắn nhất giữa hai thành phố trong một m ng giao thông, bài toán
phân công lao động sao cho tổng lợi nhuận thu đƣợc là lớn nhất. Đặc biệt,
nhiều bài toán trong thực tế sử dụng mô hình đồ thị và các thuật toán trên đồ
thị đƣợc giải quyết rất hiệu quả nhƣ: bài toán điều hành taxi, bài toán xếp lớp
học theo tín chỉ có thể đƣa về mô hình bài toán tìm bộ ghép cực đ i trên đồ thị
và sử dụng các thuật toán tƣơng ứng.
Chính vì đồ thị có thể đƣợc sử dụng để giải quyết nhiều bài toán thuộc
nhiều l nh vực khác nhau một cách dễ dàng và phổ biến nhƣ vậy nên đồ thị
giữ một vai trò hết sức quan trọng trong cuộc sống, đặc biệt là trong l nh vực
công nghệ thông tin, dựa vào đồ thị và các thuật toán trên đồ thị ngƣời ta có
thể xây dựng nên các phần mềm hữu ích giải các bài toán thực tế một cách
nhanh chóng và tối ƣu.
Nhận thấy tính thiết thực của vấn đề này và đƣợc sự gợi ý của giảng
viên hƣớng dẫn, tôi đã chọn nội dung nghiên cứu về ―Bài toán tìm bộ ghép
cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế.” làm đề tài
cho luận v n tốt nghiệp của mình.
Luận v n đƣợc bố cục thành 3 chƣơng:
Chƣơng 1. Cơ sở về lý thuyết đồ thị và độ phức tạp thuật toán: C ươn
này trình bày các khái niệm cơ bản về Lý thuyết đồ thị v độ phức tạp thuật toán
Chƣơng 2. Bài toán tìm bộ ghép cực đại trên đồ thị và các thuật toán:
C ươn n

p

t b ểu các dạng bài toán tìm bộ ghép cực đạ tr n đồ thị, trình bày

các thuật toán v đ n

độ phức tạp của các thuật toán

Chƣơng 3. Một số bài toán ứng dụng trong thực tế: Tìm hiểu một số bài
toán ứng dụng trong thực tế: B

to n đ ều hành taxi, bài toán xếp lớp học theo tín


3

chỉ … xâ dựn c ươn trìn t ử nghiệm giải các bài toán này ứng dụng bài toán
xếp lớp học theo tín chỉ tạ trường Trung cấp Kỹ thuật Vĩn P úc.


4

CHƢƠNG 1
CƠ SỞ LÝ THUYẾT VỀ ĐỒ THỊ VÀ
ĐỘ PHỨC TẠP THUẬT TO N

1.1 C C KH I NIỆM CƠ BẢN
Phần này đƣợc tham khảo trong các tài liệu [2], [3], [5], [9]
1.1.1 Khái niệm đồ thị
Đồ thị là một cấu trúc rời r c gồm các đỉnh và các c nh nối các đỉnh đ .
Đồ thị đƣợc k hiệu là G = (V, E), trong đ V là tập đỉnh và E là tập c nh. Có
thể coi E là tập các cặp(u,v) với u và v là hai đỉnh của V.
Một số hình ảnh của đồ thị.

Sơ đồ giao thông

M ng máy tính

Hình 1: Ví dụ về mô ìn đồ t ị


5

1.1.2 Các loại đồ thị
C thể phân lo i đồ thị theo đặc tính và số lƣợng của tập các c nh E:
Cho đồ thị G = (V, E).
Định nghĩa 1:
Một đơn đồ thị vô hƣớng là một bộ G = , trong đ :
- V ≠  là tập hợp hữu h n gồm các đỉnh của đồ thị.
- E là tập hợ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.
Nhƣ vậy, theo định ngh a trên, trong một đơn đồ thị không thể c các
cặp c nh nối c ng một cặp đỉnh (do E là tập hợp nên không thể c 2 cặp tr ng
nhau), các c nh đều không phân biệt thứ tự nên c nh [u,v] và c nh [v,u] đều
đƣợc coi là một c nh duy nhất, điều này ph hợp với việc biểu diễn các con
đƣờng 2 chiều, và hiển nhiên là không c cặp [u,u] nào đ trong E.
Ví dụ

a) Đơn đồ thị vô hƣớng

b) Không phải đơn đồ c) Không phải đơn đồ thị vô
thị vô hƣớng do c các hƣớng do c

c nh nối một

cặp c nh nối c ng một đỉnh với chính n .
cặp đỉnh

Hìn

: Đơn đồ t ị vô ướn v k ôn p ả đơn đồ t ị vô ướn


6

Tuy nhiên, trên thực tế, cũng c thể trong một hệ thống giao thông vẫn
tồn t i nhiều con đƣờng đi nối c ng hai địa điểm, hoặc cũng c thể c một
con đƣờng để đi từ một địa điểm nào đ rồi l i quay về chính n (đây c thể
là một con đƣờng nội bộ của một trung tâm mua sắm, …). Khi đ , tính chất
của đơn đồ thị vô hƣớng nhƣ định ngh a trên không cho phép n biểu diễn
đƣợc hệ thống giao thông trong trƣờng hợp này. Muốn vậy, ta phải d ng một
lo i đồ thị tổng quát hơn, đ là: đa đồ thị vô hƣớng.
Định nghĩa 2:
Đa đồ thị vô hƣớng là một bộ G = , trong đ
- V ≠  là tập hợp hữu h n gồm các đỉnh của đồ thị.
- E là một họ các cặp không c thứ tự của V gọi là các c nh.
Lƣu :
- Khi ta n i E là một họ ngh a là n c thể c những cặp tr ng nhau
(khác với khái niệm tập hợp).
- Các c nh nối c ng một cặp đỉnh đƣợc gọi là các c nh song song.
- Các c nh nối từ một đỉnh với chính n đƣợc gọi là khuyên.
Ví dụ

e2

e1
e

a) Đa đồ thị vô hƣớng: e1 và e2 là

b) Đa đồ thị vô hƣớng: e là khuyên

các c nh song song

Hìn 3: Đa đồ t ị vô ướn


7

Điểm chung của hai lo i đồ thị đã đƣợc định ngh a ở trên là tính chất
vô hƣớng (hai chiều) của các c nh. Trong thực tế, cũng c khi ta phải chú
trọng đến tính c hƣớng của các c nh nối này (chẳng h n nhƣ biểu diễn các
con đƣờng một chiều). Từ đ , ta c thêm lo i đồ thị: Đơn đồ thị c hƣớng và
đa đồ thị c hƣớng. Về cơ bản, hai lo i này cũng tƣơng tự nhƣ hai lo i mà ta
định ngh a ở trên, chỉ thêm sự khác biệt là tính chất c thứ tự của các c nh.
Định nghĩa 3:
Đơn đồ thị c hƣớng là một bộ G = , trong đ :
- V ≠  là tập hợp hữu h n gồm các đỉnh của đồ thị.
- E là tập hợ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ụ

a) Đơn đồ thị c
hƣớng

b) Không phải đơn đồ thị c) Không phải đơn đồ thị c
c hƣớng do c các cặp hƣớng do c cung nối một
cung nối c ng một cặp đỉnh với chính n .
đỉnh.

Hìn 4: Đơn đồ t ị có ướn v k ôn p ả đơn đồ t ị có ướn
Định nghĩa 4 :
Đa đồ thị c hƣớng là một bộ G = , trong đ
- V ≠  là tập hợp hữu h n gồm các đỉnh của đồ thị.


8

- E là một họ các cặp c thứ tự của V gọi là các cung.
Các cung nối c ng một cặp đỉnh đƣợc gọi là các cung song song.
Ví dụ

e2

e1
e

a) Đa đồ thị c hƣớng: e1 và e2 là các
cung song song.

b) Đa đồ thị c

hƣớng: e là

khuyên

Hìn 5: Đa đồ t ị có ướn
Định nghĩa 5:
Một giả đồ thị G = (V, E) gồm một tập các đỉnh V, một tập các c nh E và
một hàm f từ E tới {{u,v} | u ,v

 V }. Một c nh là một khuyên nếu f(e) =

{u} với một đỉnh u nào đ .
Một số thuật ngữ cơ bản
+ Cho đồ thị vô hƣớng G = .
- Hai đỉnh u và v của đồ thị đƣợc gọi là kề nhau nếu (u,v) là một c nh
của đồ thị.
- Nếu e = (u,v) là c nh của đồ thị thì ta n i c nh này là liên thuộc với
hai đỉnh u và v. C nh đƣợc n i là nối đỉnh u và v. Đỉnh u và v đƣợc gọi là
đỉnh đầu của c nh e.
+ Cho đồ thị vô hƣớng G = . Bậc của đỉnh v trong đồ thị, k hiệu là


9

deg(v), là số c nh liên thuộc với n . Đỉnh c bậc 0 đƣợc gọi là đỉnh cô
lập,đỉnh c bậc 1 gọi là đỉnh treo.
Ví dụ
Cho đồ thị vô hƣớng G = sau:

1

2

4

5

3

6

Hìn 6: Đơn đồ t ị vô ướn
- V = {1, 2, 3, 4, 5, 6}
- E = {(1,2), (2,3), (1,4), (1,5), (2,5), (4,5), (2,4)}
- Bậc của các đỉnh:
- deg(1) = 3 deg(2) = 4 deg(3) = 1
- deg(4) = 3 deg(5) = 3 deg(6) = 0
- Đỉnh 3 là đỉnh treo
- Đỉnh 6 là đỉnh cô lập
+ Cho G = là đồ thị vô hƣớng. Khi đ ta c tổng số bậc của các đỉnh
của đồ thị sẽ bằng hai lần số c nh của n . N i cách khác, ta c :

 deg  v  2|E|
vV

-Trong đồ thị vô hƣớng, số đỉnh bậc lẻ là một số chẵn.
+ Cho đồ thị c hƣớng G = .


10

- Hai đỉnh u và v của đồ thị đƣợc gọi là kề nhau nếu (u,v) là một cung
của đồ thị.
- Nếu e=(u,v) là cung của đồ thị thì ta n i cung này đi ra khỏi đỉnh u và
đi vào đỉnh v. Đỉnh u đƣợc gọi là đỉnh đầu của cung e và đỉnh v đƣợc gọi là
đỉnh cuối của cung e.
+ Cho đồ thị c hƣớng G=.
- Bán bậc ra của đỉnh v trong đồ thị, k hiệu là deg+(v), là số c nh đi ra
khỏi v.
- Bán bậc vào của đỉnh v trong đồ thị, k hiệu là deg - (v), là số c nh
vào v.
Ví dụ
Xét đồ thị c hƣớng G = sau:
1

2

4

5

3

6

Hìn 7: Đồ t ị có ướn

- V = {1, 2, 3, 4, 5, 6}
- E = {(1,2), (2,3), (1,4), (5,1), (5,2), (2,6), (6,3), (4,5), (6,5), (3,4)}
- Bậc của các đỉnh:


11

- Bán bậc ra: deg+(1)=2 deg+(2)=2 deg+(3)=1
deg+(4)=1 deg+(5)=2 deg+(6)=2
- Bán bậc vào: deg-(1)=1 deg-(2)=2 deg-(3)=2
deg-(4)=2 deg-(1)=2 deg-(1)=1
Tƣơng tự nhƣ đồ thị vô hƣớng, đối với đồ thị c hƣớng ta cũng c kết
quả gần tƣơng tự về bậc của các đỉnh của đồ thị.
+ Cho G = là đồ thị c hƣớng. Tổng bán bậc ra của các đỉnh bằng
tổng bán bậc vào của các đỉnh và bằng số c nh của đồ thị.

 deg  v    deg  v   |E|


vV



vV

+ Đồ thị vô hƣớng G = đƣợ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 .
1.1.3 Biểu diễn đồ thị
Lý thuyết đồ thị đƣợc ứng dụng trong rất nhiều l nh vực khác nhau. Để
sử dụng đƣợc đồ thị hiệu quả và nhanh ch ng hơn, chúng ta phải biểu diễn và
xử l đƣợc đồ thị với máy tính. Cách biểu diễn thông thƣờng bằng hình vẽ và
mô tả tập hợp sẽ không ph hợp với cách thức lƣu trữ dữ liệu và xử l trên
máy tính. Chúng ta phải tìm một cấu trúc dữ liệu thích hợp để biểu diễn đồ thị
trên máy tính.
C nhiều phƣơng pháp khác nhau để biểu diễn đồ thị trên máy tính. Sau đây
chúng ta sẽ lần lƣợt tìm hiểu một số phƣơng pháp thông dụng.
a. Danh sách cạnh
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, trong cách biểu diễn này, ngƣời ta 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


12

(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ị dƣới đây:
1
5

2

4

3

Cài đặt trên mảng:
1

2

3

4

5

(1,3)

(2,4)

(3,5)

(4,1)

(5,2)

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

3

2

4

3

5

4

1

5

2
nil

Hìn 8: Ví dụ b ểu d ễn đồ t ị dan s c cạn
Ưu đ ểm của dan s c cạn :
• 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ì


13

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)
ược đ ểm của dan s c cạn :
• Nhƣợc điểm cơ bản của danh sách c nh là khi ta cần duyệt tất cả
các đỉnh kề với đỉnh v nào đ của đồ thị, thì chẳng c cách nào khác là phải
duyệt tất cả các c nh, lọc ra những c nh c chứa đỉnh v và xét đỉnh còn l i.
Điều đ khá tốn thời gian trong trƣờng hợp đồ thị dày (nhiều c nh).
b. Danh sách liền kề
Sử dụng danh sách liền kề để biểu diễn đồ thị không c c nh bội. Danh
sách này chỉ rõ các đỉnh nối với mỗi đỉnh của đồ thị.
1
5

2
4
3

Đỉnh

Đỉnh liền kề

1

2, 3,4, 5

2

1 ,3 , 4 , 5

3

1 ,2 ,4

4

1 ,2 ,3

5

1 ,2

Hìn 9: Ví dụ b ểu d ễn đồ t ị dan s c l ền kề
Ưu đ ểm của dan s c kề:
• Đối với danh sách kề, việc duyệt tất cả các đỉnh kề với một đỉnh v cho
trƣớc là hết sức dễ dàng, cái tên "danh sách kề" đã cho thấy rõ điều này. Việc
duyệt tất cả các c nh cũng đơn giản vì một c nh thực ra là nối một đỉnh với
một đỉnh khác kề n .


14

ược đ ểm của dan s c kề
• Về l thuyết, so với hai phƣơng pháp biểu diễn trên, danh sách kề tốt hơn
hẳn. Chỉ c điều, trong trƣờng hợp cụ thể mà ma trận kề hay danh sách c nh
không thể hiện nhƣợc điểm thì ta nên d ng ma trận kề (hay danh sách c nh)
bởi cài đặt danh sách kề c phần dài dòng hơn.
c. Ma trận liền kề
Giả sử G = (V, E) là một đồ thị đơn trong đ |V| = n và các đỉnh đƣợc
liệt kê tuỳ

v1,…,vn. Ma trận liền kề A của G ứng với danh sách các đỉnh

này là ma trận không - một cấp n*n c phần tử hàng i, cột j bằng 1 nếu vi và
vj liền kề nhau, và bằng 0 nếu chúng không đƣợc nối với nhau.

1
5

2
4
3

Hìn

1

2

4

5

1

0

1

1

1

1

2

1

0

1

1

1

3

1

1

0

1

0

4

1

1

1

0

0

5

1

1

0

0

0

: Ví dụ b ểu d ễn đồ t ị ma trận kề

C c tín c ất của ma trận l ền kề:
1. Đối với đồ thị vô hƣớng G, thì ma trận liề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.
2.

Nếu G là đồ thị vô hƣớng và A là ma trận liền kề tƣơng ứng thì

trên ma trận A:Tổng các số trên hàng i = Tổng các số trên cột i = Bậc
của đỉnh i = deg(i)
3. Nếu G là đồ thị c hƣớng và A là ma trận liền kề tƣơng ứng thì trên ma
trận A:


15

• Tổng các số trên hàng i = Bán bậc ra của đỉnh i = deg+(i)
• Tổng các số trên cột i = Bán 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 liề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 đ ểm của ma trận l ề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.
ược đ ểm của ma trận l ền kề:
• Bất kể số c nh của đồ thị là nhiều hay ít, ma trận liền kề luôn luôn đòi
hỏi n2 ô 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 liề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.
d. Ma trận liên thuộc
Giả sử G = (V, E) là một đồ thị vô hƣớng, v1, v2, vn là tập các đỉnh còn
e1, e2, ..., em là tập các c nh của n . Khi đ ma trận liên thuộc theo thứ tự trên
của V và E là ma trận M = [mij] trong đ :
mij = 1 nếu c nh ej nối với đỉnh vi


16

mij = 0 nếu c nh ej không nối với
đỉnh vi
e6
V1

V5

e1

e2

e3

e4

e5

e6

e7

e8

v1

1

0

0

0

1

1

1

0

v2

1

1

1

1

0

0

0

0

v3

0

0

0

1

0

1

0

1

v4

0

0

1

0

0

0

1

1

v5

0

1

0

0

1

0

0

0

e4
e1

e7
e3

V4

V2

e2

e8
V3

Hìn

: Ví dụ b ểu d ễn đồ t ị ma trận l n t uộc

1.2 ĐỘ PHỨC TẠP TÍNH TO N VÀ TÍNH HIỆU QUẢ CỦA THUẬT
TOÁN
1.2.1 Định nghĩa thuật toán
Thuật toán là một dãy hữu h n các bƣớc, mỗi bƣớc mô tả chính xác các
phép toán hoặc hành động cần thực hiện để cho ta lời giải của bài toán.
- Thao tác , hay còn gọi là tác vụ, phép toán ( Operation ) hay lệnh
(Command), chỉ thị (Instruction)...là một hành động cần đƣợc thực hiện bởi
cơ chế thực hiện thuật toán.
Mỗi thao tác biến đổi bài toán từ một tr ng thái trƣớc (hay tr ng thái
nhập) sang tr ng thái sau (hay tr ng thái xuất).Thực tế mỗi thao tác thƣờng sử
dụng một số đối tƣợng trong tr ng thái nhập (các đối tƣợng nhập )và sản sinh
ra các đối tƣợng mới trong tr ng thái xuất (các đối tƣợng xuất). Quan hệ giữa
2 tr ng thái xuất và nhập cho thấy tác động của thao tác. Dãy các thao tác của
thuật toán nối tiếp nhau nhằm biến đổi bài toán từ tr ng thái ban đầu đến tr ng
thái kết quả.


17

Mỗi thao tác có thể phân tích thành các thao tác đơn giản hơn. Trình tự
thực hiện các thao tác phải đƣợc xác định rõ ràng trong thuật toán. Cùng một
tập hợp thao tác nhƣng xếp đặt theo trình tự khác nhau sẽ cho kết quả khác
nhau.
1.2.2 Phân tích độ phức tạp của thuật toán
Trong khi giải một bài toán c thể c một số giải thuật khác nhau, vấn
đề là cần phải đánh giá các giải thuật đ để lựa chọn một giải thuật tốt nhất.
Thông thƣờng ngƣời ta c n cứ vào các tiêu chuẩn sau:
- Tiêu chuẩn về tính đúng đắn của thuật toán, thuật toán c cho lời giải
đúng của bài toán hay không ?
- Tiêu chuẩn về tính đơn giản của thuật toán. Thƣờng ta mong muốn c
đƣợc một thuật toán đơn giản, dễ hiểu, dễ lập trình. Đặc biệt là những thuật
toán chỉ d ng một vài lần ta cần coi trọng tính chất này, vì công sức và thời
gian bỏ ra để xây dựng thuật toán thƣờng lớn hơn rất nhiều so với thời gian
thực hiện n .
- Tiêu chuẩn về thời gian: Thời gian ch y của thuật toán c nhanh
không? Khi một chƣơng trình đƣợc sử dụng nhiều lần thì yêu cầu tiết kiệm
thời gian thực hiện chƣơng trình l i rất quan trọng, đặc biệt đối với những bài
toán mà dữ liệu đầu vào lớn thì tiêu chuẩn này là rất quan trọng.
Trong phần này ta quan tâm chủ yếu đến độ phức t p thời gian của
thuật toán.
Các bước trong quá trình phân tích đánh giá thời gian chạy của thuật toán:
- Bƣớc đầu tiên trong việc phân tích thời gian ch y của thuật toán là
quan tâm đến kích thƣớc dữ liệu, sẽ đƣợc d ng nhƣ dữ liệu nhập của thuật
toán và quyết định phân tích thuật toán nào là thích hợp. Ta c thể xem thời
gian ch y của thuật toán là một hàm theo kích thƣớc của dữ liệu nhập. Nếu


18

gọi n là kích thƣớc của dữ liệu nhập thì thời gian thực hiện T của thuật toán
đƣợc biểu diễn nhƣ một hàm theo n, k hiệu là: T(n). Ngƣời ta thƣờng coi
T(n) là thời gian thực hiện chƣơng trình trong trƣờng hợp xâu nhất trên dữ
liệu vào c kích thƣớc n, tức là: T(n) là thời gian lớn nhất để thực hiện
chƣơng trình đối với mọi dữ liệu vào c cúng kích thƣớc n.
- Bƣớc thứ hai trong việc phân tích thời gian ch y của một thuật toán là
nhân ra các thao tác trừu tƣợng của thuật toán để tách biệt sự phân tích và sự
cài đặt. Bởi vì ta biết rằng tốc độ xử l của máy tính và các bộ dịch của ngôn
ngữ lập trình cao cấp đều ảnh hƣởng đến thời gian ch y của thuật toán, nhƣng
những thao tác này không đồng đều trên các lo i máy trên đ cài đặt thuật
toán, vì vậy không thể dựa và chúng để đánh giá thời gian ch y của thuật
toán. Chẳng h n ta tách biệt sự xem xét xem c bao nhiêu phép toán so sánh
trong một thuật toán sắp xếp khỏi sự xác định cần bao nhiêu micro giây ch y
trên một máy tính cụ thể. Yếu tố thứ nhất đƣợc xác định bởi tính chất của
thuật toán, còn yếu tố thứ hai đƣợc xác định bởi tính n ng của máy tính. Điều
này cho thấy rằng T(n) không thể đƣợc biểu diễn bằng giây, phút … đƣợc;
cách tốt nhất là biểu diễn theo số các chỉ thị trong thuật toán.
1.2.3 Tối ƣu thuật toán
Tiến trình tổng quát của việc t o ra các sửa đổi ngày càng tiến bộ hơn
cho một thuật toán để sinh ra một phiên bản khác ch y nhanh hơn đƣợc gọi là
tối ƣu thuật toán. Khi tối ƣu một thuật toán ta thƣờng dựa vào một nguyên lý,
đ là nguyên l Profile : ― Tìm điểm mất thời gian nhiều nhất của thuật toán ―.
Một số kỹ thuật thƣờng d ng để tối ƣu thuật toán là:
Kỹ thuật tố ưu c c vòn lặp và tố ưu v ệc rẽ nhánh
Đây là điểm quan tâm đầu tiên khi cải tiến thuật toán,vì vòng lặp là câu
lệnh thƣờng làm t ng độ phức t p của thuật toán. Việc cải tiến tập trung vào :
- Cố gắng giảm các vòng lặp lồng nhau.


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×