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

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ế

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 (2.04 MB, 80 trang )

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 TỐ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

Số hóa bởi Trung tâm Học liệu – ĐHTN




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 TỐ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

Số hóa bởi Trung tâm Học liệu – ĐHTN




iii

LỜI CAM ĐOAN

Em xin cam đoan: Luận văn tha ̣c si ̃ Khoa học máy tính “ Bài tốn tìm bộ
ghép cực đại trên đồ thị, ứng dụng giải một số bài tố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 chiụ trách nhiê ̣m về lời cam đoan này.
Thái Nguyên, ngày

tháng

năm 2015


Tác giả

Vũ Minh Tiệp

Số hóa bởi Trung tâm Học liệu – ĐHTN




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à hồ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 ba ̣n.
Xin trân trọng cảm ơn.
Thái Nguyên, ngày


tháng

năm 2015

Tác giả

Vũ Minh Tiệp

Số hóa bởi Trung tâm Học liệu – ĐHTN




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 TỐN VÀ TÍNH HIỆU QUẢ CỦA THUẬT TỐN .. 16
1.2.1 Định nghĩa thuật tố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 TỐN TÌM KIẾM TRÊN ĐỒ THỊ .................................... 19
1.3.1 Thuật tốn tìm kiếm theo chiều sâu (DEPTH FIRST SEARCH) ................... 19
1.3.2 Thuật tốn tìm kiếm theo chiều rộng (BREADTH FIRST SEARCH) ........... 21

CHƯƠNG 2. BÀI TỐ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 tốn trên đồ thị hai phía .................................................................... 26
2.2 BÀI TỐN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA................. 26
2.2.1 Bài tố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 TỐ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 tốn phân cơng ....................................................................................... 29
2.3.2 Thuật tố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
Số hóa bởi Trung tâm Học liệu – ĐHTN




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 TỐ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 tốn ......................................................................................... 50
3.1.2 Phân tích bài tốn và xây dựng thuật tốn ..................................................... 50
3.2 BÀI TỐ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 tốn ......................................................................................... 61
3.2.3 Phân tích bài tốn và xây dựng thuật tốn ..................................................... 62
TÀI LIỆU THAM KHẢO ..................................................................................... 73

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: 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 tố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 xun qua Blossom ............................... 46

Số hóa bởi Trung tâm Học liệu – ĐHTN




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 tốn ln là điều đáng được
quan tâm.
Đặc biệt trong các chun ngành liên quan thì tố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 tố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
lồ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 tốn như
bài tố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 tốn đi tham quan tất cả các phố của một
Số hóa bởi Trung tâm Học liệu – ĐHTN




2

thành phố sao cho mỗi phố đi qua đúng một lần, hay bài tố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 tố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 tố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 tốn xếp lớp
học theo tín chỉ có thể đưa về mơ hình bài tốn tìm bộ ghép cực đại trên đồ thị
và sử dụng các thuật tố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 tố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 tố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 tốn: Chương
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 tốn
Chương 2. Bài tốn tìm bộ ghép cực đại trên đồ thị và các thuật tốn:
Chương này phát biểu các dạng bài tốn tìm bộ ghép cực đại trên đồ thị, trình bày
các thuật tốn và đánh giá độ 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
tốn ứng dụng trong thực tế: Bài toán điều hành taxi, bài toán xếp lớp học theo tín
Số hóa bởi Trung tâm Học liệu – ĐHTN




3

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

Số hóa bởi Trung tâm Học liệu – ĐHTN




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ơ hình đồ thị

Số hóa bởi Trung tâm Học liệu – ĐHTN




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 = <V,E>, 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ình 2: Đơn đồ thị vơ hướng và khơng phải đơn đồ thị vơ hướng

Số hóa bởi Trung tâm Học liệu – ĐHTN




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 = <V,E>, 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à khun.
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ình 3: Đa đồ thị vơ hướng
Số hóa bởi Trung tâm Học liệu – ĐHTN





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 = <V,E>, 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ình 4: Đơn đồ thị có hướng và khơng phải đơn đồ thị có hướng
Định nghĩa 4 :
Đa đồ thị có hướng là một bộ G = <V,E>, trong đó
- V ≠  là tập hợp hữu hạn gồm các đỉnh của đồ thị.
Số hóa bởi Trung tâm Học liệu – ĐHTN





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à
khun

Hình 5: Đa đồ thị có hướng
Đị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 = <V,E>.
- 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 = <V,E>. Bậc của đỉnh v trong đồ thị, ký hiệu là

Số hóa bởi Trung tâm Học liệu – ĐHTN




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 = <V,E> sau:

1

2

4

5

3

6

Hình 6: Đơn đồ thị vơ hướng

- 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 = <V,E> 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 = <V,E>.
Số hóa bởi Trung tâm Học liệu – ĐHTN




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=<V,E>.
- 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 = <V,E> sau:
1

2

4

5

3

6

Hình 7: Đồ thị có hướng

- 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:
Số hóa bởi Trung tâm Học liệu – ĐHTN




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 = <V,E> 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 = <V,E> được gọi là liên thơng nếu ln 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

Số hóa bởi Trung tâm Học liệu – ĐHTN




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ình 8: Ví dụ biểu diễn đồ thị danh sách cạnh
Ư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ì
Số hóa bởi Trung tâm Học liệu – ĐHTN




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)
Nhược điểm của danh sách cạnh:
• 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ình 9: Ví dụ biểu diễn đồ thị danh sách liền kề
Ưu điểm của danh sách 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ó.

Số hóa bởi Trung tâm Học liệu – ĐHTN




14

Nhược điểm của danh sách 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

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

Hình 10: Ví dụ biểu diễn đồ thị ma trận kề
Các tính chất của ma trận liề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:
Số hóa bởi Trung tâm Học liệu – ĐHTN




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 điểm của ma trận liề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 liền kề:
• Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận liền kề ln ln đị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

Số hóa bởi Trung tâm Học liệu – ĐHTN




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ình 11: Ví dụ biểu diễn đồ thị ma trận liên thuộc
1.2 ĐỘ PHỨC TẠP TÍNH TỐN VÀ TÍNH HIỆU QUẢ CỦA THUẬT
TỐN
1.2.1 Định nghĩa thuật tốn
Thuật tố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 tố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ả.
Số hóa bởi Trung tâm Học liệu – ĐHTN




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 tốn, thuật tốn có cho lời giải
đúng của bài tốn hay khơng ?
- Tiêu chuẩn về tính đơn giản của thuật tốn. Thường ta mong muốn có
được một thuật tốn đơn giản, dễ hiểu, dễ lập trình. Đặc biệt là những thuật
tố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 tố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 tốn.
Các bước trong q 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 tố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 tố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

Số hóa bởi Trung tâm Học liệu – ĐHTN




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 tố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
tố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 tốn so sánh
trong một thuật tố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 tố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 tốn.
1.2.3 Tối ưu thuật tốn
Tiến trình tổng qt 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 ngun lý,
đó là ngun 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ối ưu các vòng lặp và tối ưu việc rẽ nhánh
Đây là điểm quan tâm đầu tiên khi cải tiến thuật tố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.
Số hóa bởi Trung tâm Học liệu – ĐHTN




×