Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ Điều đầu tiên em xin gửi lời cảm ơn tới các Thầy, Cô Trường Đại học Công nghệ thông tin và Truyền thông Thái Nguyên trong
Trang 1Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Trang 2Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Tên em là Trần Thị Phương Thảo, học viên lớp Cao học K12E, chuyên ngành Khoa học máy tính, khóa học 2013 – 2015 Em xin cam đoan luận văn:
“NGHIÊN CỨU CÁC THUẬT TOÁN VỀ CÂY KHUNG VÀ ỨNG DỤNG ” Dưới sự hướng dẫn của PGS TSKH Nguyễn Xuân Huy - Trường Đại học
dung trình bày được trích dẫn đầy đủ từ các nguồn tài liệu tham khảo chính thống (báo khoa học, các sách có bản quyền), các nội dung trình bày trong luận văn hoàn toàn trung thực Và đây là công trình nghiên cứu của bản thân kết hợp với sự hướng dẫn của PGS TSKH.Nguyễn Xuân Huy tạo lập ra
Nếu có nội dung nào sao chụp lại hoặc không phải do chính bản thân tạo ra, em xin hoàn toàn chịu tránh nhiệm và chịu các hình thức kỷ luật
Phú Thọ, ngày 4 tháng 10 năm 2015
Trần Thị Phương Thảo
Trang 3Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Điều đầu tiên em xin gửi lời cảm ơn tới các Thầy, Cô Trường Đại học Công nghệ thông tin và Truyền thông Thái Nguyên trong thời gian vừa qua đã cung cấp và truyền đạt chương trình học với các môn học có nội dung bổ ích Thông qua chương trình học, em được lĩnh hội nhiều về kiến thức chuyên môn, các phương pháp tiếp cận bài toán trong tin học
Em xin gửi lời cảm ơn sâu sắc tới PGS TSKH Nguyễn Xuân Huy,
người Thầy đã hướng dẫn, chỉ bảo, giám sát, theo dõi, cung cấp phương pháp, nguồn dữ liệu tiếp cận bài toán để em có thể hoàn thành được luận văn của mình
Em xin cảm ơn Ban Giám hiệu trường THPT Trần Phú cùng các đồng nghiệp trong Trường, xin cảm ơn Trường Đại học Công nghệ thông tin và Truyền thông, Đại học Thái Nguyên đã tạo mọi điều kiện giúp đỡ để em hoàn thành chương trình học tập và luận văn tốt nghiệp
Điều cuối cùng em xin cảm ơn gia đình, bạn bè luôn nhiệt tình ủng
hộ, động viên, giúp đỡ cả về vật chất lẫn tinh thần trong thời gian học tập
và nghiên cứu
Trong quá trình thực hiện luận văn, mặc dù đã có rất nhiều cố gắng nhưng cũng không tránh khỏi những thiếu sót Kính mong nhận được sự cảm thông và tận tình chỉ bảo của các Thầy, Cô và các bạn
Em xin trân trọng cảm ơn!
Phú Thọ, ngày 4 tháng 10 năm 2015
HỌC VIÊN Trần Thị Phương Thảo
Trang 4
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
MỞ ĐẦU 1
1 Tính cấp thiết của đề tài 1
2 Đối tượng và phạm vi nghiên cứu 2
3 Phương pháp nghiên cứu 2
4 Hướng nghiên cứu của đề tài 3
5 Những nội dung nghiên cứu chính 3
CHƯƠNG 1: TỔNG QUAN VỀ CÂY KHUNG 4
1.1 MỘT SỐ KHÁI NIỆM LIÊN QUAN TỚI ĐỒ THỊ 4
1.1.1 Định nghĩa đồ thị 4
1.1.2 Các loại đồ thị 5
1.1.3 Bậc của đồ thị 6
1.2 ĐỒ THỊ CON, ĐỒ THỊ BỘ PHẬN 8
1.2.1 Đồ thị con, đồ thị bộ phận 8
1.2.2 Đường đi, chu trình trong đồ thị 8
1.3 TỔNG QUAN VỀ CÂY KHUNG 10
1.3.1 Định nghĩa về cây 10
1.3.2 Cây khung 11
1.3.3 Cây khung cực tiểu 12
1.3.4 Rừng khung, rừng khung cực tiểu 13
1.3.4.1 Rừng khung 13
1.3.4.2 Rừng khung cực tiểu 14
1.3.5 Cầu, cạnh trọng yếu 15
1.3.6 Khớp 16
1.3.7 Liên thông hóa 16
1.4 BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH 20
Trang 5Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
1.4.2 Ma trận liên thuộc 22
1.4.3 Danh sách kề 23
CHƯƠNG 2: TÌM HIỂU MỘT SỐ THUẬT TOÁN VỀ CÂY KHUNG 25
2.1 GIỚI THIỆU KỸ THUẬT FIND UNION 25
2.2 THUẬT TOÁN TÌM CÂY KHUNG, CÂY KHUNG CỰC TIỂU 31
2.2.1 Thuật toán tìm cây khung 31
2.2.2 Thuật toán tìm cây khung cực tiểu 33
2.3 THUẬT TOÁN LIỆT KÊ CÁC CÂY KHUNG THÀNH PHẦN CỦA RỪNG KHUNG 40
2.4 THUẬT TOÁN LIỆT KÊ CÁC CÂY KHUNG THÀNH PHẦN CỦA RỪNG KHUNG CỰC TIỂU 44
2.5 THUẬT TOÁN LIỆT KÊ CÁC CẦU 48
2.6 THUẬT TOÁN LIỆT KÊ CÁC KHỚP 50
CHƯƠNG 3: MỘT SỐ ỨNG DỤNG CỦA BÀI TOÁN CÂY KHUNG GIẢI QUYẾT VẤN ĐỀ THỰC TẾ 54
3.1 BÀI TOÁN CÁP MẠNG 54
3.2 BÀI TOÁN TUYẾN ĐƯỜNG QUAN TRỌNG TRONG QUÂN SỰ 59
3.3 CÀI ĐẶT CHƯƠNG TRÌNH 64
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 64
Tài liệu tham khảo: 66
Trang 6
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
1 Tính cấp thiết của đề tài
Khái niệm về cây khung được CayLey đưa ra năm 1857 [4]
Cây là đồ thị vô hướng, liên thông, không có chu trình
Trong tin học, cây được dùng để xây dựng các thuật toán, tổ chức các thư mục, các thuật toán tìm kiếm, lưu trữ và nén dữ liệu,…[3,5] Có rất nhiều bài toán vận dụng khái niệm về cây như: Sửa chữa đường, định chiều các đường
đi trong thành phố, tìm cây khung có nhiều lá nhất…
Cây khung của một đồ thị hữu hạn, vô hướng và liên thông là đồ thị con liên thông chứa mọi đỉnh và ít cạnh nhất [1,2,3,4,5,6,7] Nếu đồ thị ban đầu có
n đỉnh thì cây khung của đồ thị này có n đỉnh và n - 1 cạnh Nhiều bài toán trong thực tiễn đòi hỏi phải xây dựng cây khung với các biến thể khác nhau, thí dụ: Bài toán du lịch, bài toán kết nối mạng máy tính, bài toán quản lý vốn vay của địa phương
Một số biến thể của cây khung cũng được vận dụng nhiều trong thực tiễn [3] Thí dụ: Một mạng giao thông có nhiều cầu Khi một cầu bị phá thì mạng
vẫn có thể liên thông Một cầu được gọi là trọng yếu nếu như khi bỏ cầu đó
thì mạng mất liên thông [3] Trong chiến tranh đối phương thường quan tâm phá những cầu trọng yếu Trong một mạng máy tính đường nối giữa hai máy
được xem là trọng yếu nếu đường nối đó bị đứt thì mạng mất tính liên thông
Một đỉnh trong đồ thị liên thông được gọi là trọng yếu hay đỉnh khớp nếu
bỏ đỉnh đó và những cạnh liên thuộc thì đồ thị mất tính liên thông [3]
Trang 7Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
niệm cây khung Thí dụ, mọi cầu trọng yếu đều phải thuộc một cây khung nào
đó
Với những lí do trên học viên chọn đề tài nghiên cứu các thuật toán về cây khung và ứng dụng nhằm các mục đích sau:
- Tìm hiểu các khái niệm về đồ thị nói chung và đồ thị liên thông nói riêng
- Tìm hiểu sâu về cây khung và các thuật toán liên quan đến cây khung và các biến thể của cây khung
- Xây dựng một số ứng dụng cây khung giải quyết một số vấn đề thực tiễn: Bài toán kết nối mạng, bài toán quản lý giao thông, bài toán quản lý cụm hải đảo và các quần thể động thực vật
2 Đối tượng và phạm vi nghiên cứu
a Đối tượng nghiên cứu:
Tổng quan lý thuyết về cây khung
Tìm hiểu một số thuật toán về cây khung điển hình như: Tìm cây khung, tìm cây khung cực tiểu, các bài toán về rừng khung, liệt kê các cây khung, cầu trọng yếu, đỉnh khớp…
Các ứng dụng của việc giải quyết các bài toán cây khung vào trong thực tế
b Phạm vi nghiên cứu:
Khảo sát, đánh giá tổng quan về lý thuyết cũng như các bài toán và các biến thể của cây khung trong lớp các đồ thị hữu hạn
3 Phương pháp nghiên cứu
Sử dụng các phương pháp nghiên cứu chính sau:
Trang 8Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
thức, tìm hiểu các khái niệm, thuật toán sử dụng trong đề tài
- Phương pháp thực nghiệm: Điều tra chọn mẫu, xử lý thông tin,
- Phương pháp trao đổi khoa học, lấy ý kiến chuyên gia
4 Hướng nghiên cứu của đề tài
- Tổng quan về lý thuyết đồ thị và cây khung
- Nghiên cứu các thuật toán về cây khung
- Ứng dụng của các bài toán cây khung trong thực tế
- Cài đặt thử nghiệm chương trình
5 Những nội dung nghiên cứu chính
Nội dung chính của luận văn được chia thành ba chương, cụ thể như sau:
Trang 9
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
u
u
TỔNG QUAN VỀ CÂY KHUNG
1.1 MỘT SỐ KHÁI NIỆM LIÊN QUAN TỚI ĐỒ THỊ
( Các khái niệm cơ bản liên quan đến đồ thị được trình bày chi tiết trong tài liệu [1,2,6])
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 các đỉnh của
đồ thị Các loại đồ thị khác nhau được phân biệt dựa trên kiểu và số lượng cạnh nối hai đỉnh nào đó của đồ thị
- Nếu u = (x,y) mà x,y là cặp đỉnh có phân biệt thứ tự hay có hướng từ x đến
y thì u là một cung, khi đó x là gốc còn y là ngọn hoặc x là đỉnh ra, y là đỉnh vào
x x
Trang 10Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
cặp đỉnh là những cạnh song song hay là cạnh bội
1.1.2 Các loại đồ thị
a Đồ thị vô hướng
- Đồ thị G=<V,E> được gọi là đồ thị vô hướng nếu tất cả các cạnh u E
mà cặp đỉnh thuộc nó u = (x,y) (trong đó x,y V) không phân biệt thứ tự
Hình 1.1: Đơn đồ thị vô hướng gồm 8 đỉnh 7 cạnh
b Đồ thị có hướng
Đồ thị G = <V, E> được gọi là đồ thị có hướng nếu tất cả các cạnh u E mà cặp đỉnh thuộc nó u = (x, y) (trong đó x,y V) có phân biệt thứ tự Đồ thị có hướng là đồ thị mà mọi u=(x, y) V đều là cung
Trang 11Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Trang 12Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
cạnh E = 1,2 , {1,5}, {2,3}, {2,5}, {3,4}, {4,5}, 4,6
Bậc của đỉnh v trong đồ thị G, ký hiệu d G (v), là số cạnh liên thuộc với v, trong
đó, khuyên được tính hai lần Một đỉnh có bậc 0 là đỉnh cô lập Đỉnh có bậc 1
là một đỉnh treo hay lá Trong đồ thị ví dụ, các đỉnh 1 và 3 có bậc là 2, các đỉnh 2, 4 và 5 có bậc bằng 3, đỉnh 6 có bậc 1
Nếu tập cạnh E là hữu hạn thì tổng giá trị bậc của các đỉnh gọi là bậc của đồ
thị Bậc của đồ thị bằng hai lần số cạnh Số các đỉnh bậc lẻ luôn là số chẵn
Bậc cực đại của đồ thị G, ký hiệu Δ(G), là bậc lớn nhất của các đỉnh trong đồ thị; bậc cực tiểu, δ(G), là bậc nhỏ nhất của các đỉnh trong đồ thị
b Bậc của đồ thị có hướng
Hình 1.4: Đồ thị có hướng
Xét đồ thị cho trong hình 1.4 Ta có:
deg - (a)=1, deg - (b)=2, deg - (c)=2, deg - (d)=2, deg - (e) = 2
deg + (a)=3, deg + (b)=1, deg + (c)=1, deg + (d)=2, deg + (e)=2
Trang 13Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
hai lần) Bậc của v được ký hiệu là
Trong một đồ thị có hướng, bậc trong của đỉnh v là số cung kết thúc tại v, còn bậc ngoài là số cung xuất phát từ v Bậc trong và bậc ngoài của v được ký
Đỉnh với được gọi là đỉnh cô lập Đỉnh có được gọi
là lá Nếu mỗi đỉnh của đồ thị đều có bậc bằng nhau và bằng k thì đồ thị được gọi là đồ thị chính quy bậc k và đồ thị được coi là có bậc bằng k
Đỉnh có được gọi là đỉnh phát, đỉnh có là đỉnh thu
Trong đồ thị có hướng Γ, bậc ngoài dΓ+
(v), số cung xuất phát từ đỉnh v, và bậc trong dΓ-(v), số cung đi vào đỉnh v Bậc dΓ(v) của đỉnh v bằng tổng bậc ngoài
và bậc trong của đỉnh đó Bậc ngoài cực đại và cực tiểu được ký hiệu Δ+
- Nếu trong đồ thị đó ta bỏ đi một số đỉnh nào đó và các cạnh (cung) xuất phát
từ đỉnh đó thì phần còn lại của đồ thị được gọi là đồ thị con của đồ thị G đã cho
- Nếu trong đồ thị G ta bỏ đi một số cạnh nhưng giữ nguyên các đỉnh thì phần còn lại của đồ thị được gọi là đồ thị bộ phận của đồ thị G
1.2.2 Đường đi, chu trình trong đồ thị
Trang 14Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
trên đồ thị vô hướng G = (V, E) là dãy x 0 , x 1 ,…, x n-1 , x n
Hình 1.7 Hình 1.8
Hình 1.7 và 1.8: Đường đi trên đồ thị
Trên đồ thị vô hướng cho trong hình 1.7 : a, d, c, f, e là đường đi đơn độ dài
4 Còn d, e, c, a không là đường đi, do (c,e) không phải là cạnh của đồ thị Dãy b, c, f, e, b là chu trình độ dài 5 Đường đi a, b, e, d, a, b có độ dài là 5 không phải là đường đi đơn, do cạnh (a, b) có mặt trong nó 2 lần
Khái niệm đường đi và chu trình trên đồ thị có hướng được định nghĩa hoàn toàn tương tự như trong trường hợp đồ thị vô hướng, chỉ khác là ta có chú ý đến hướng trên các cung
Trang 15Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
1.3.1 Định nghĩa về cây : Cho đồ thị G = <V, E>, G được gọi là một cây nếu
G liên thông và không có chu trình đơn, Đồ thị vô hướng không có chu trình đơn gọi là rừng (hợp của nhiều cây), với n = V > 1
Khi đó sáu tính chất sau là tương đương
(1) G là đồ thị liên thông và không có chu trình
(2) G không có chu trình và có n - 1 cạnh
(3) G liên thông và có n - 1 cạnh
(4) G không có chu trình và nếu thêm vào một cạnh nối 2 đỉnh
không kề nhau thì G xuất hiện duy nhất một chu trình
(5) G liên thông và nếu bỏ đi một cạnh tuỳ ý thì đồ thị nhận được
sẽ không liên thông
(6) Mỗi cặp đỉnh trong G nối với nhau bằng một đường duy nhất
Trang 16Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hình 1.17: Cây
1.3.2 Cây khung
Định nghĩa : Cây khung (còn gọi là cây bao trùm) của một đồ thị n đỉnh, m
cạnh là cây gồm n đỉnh với số cạnh tối thiểu bảo toàn tính liên thông của đồ
thị
Cho đồ thị G = <V, E> với số đỉnh n lớn hơn 1
Giả sử G' là đồ thị bộ phận của G (G' nhận được từ G bằng cách bỏ đi một số cạnh nhưng vẫn giữ nguyên đỉnh) Nếu G' = <V, E'> là một cây thì G' gọi là cây bao trùm của G Theo đúng tính chất về cây G' là cây bao trùm phải có
n - 1 cạnh và là một đồ thị liên thông không có chu trình
Giả sử G = (V, E) là đồ thị vô hướng Cây T = (V, F) với F E gọi là cây khung của đồ thị G Tức là nếu như loại bỏ một số cạnh của G để được một cây thì cây đó gọi là cây khung (hay cây bao trùm của đồ thị)
Dễ thấy rằng với một đồ thị vô hướng liên thông có thể có nhiều cây khung Điều kiện cần và đủ để một đồ thị vô hướng có cây khung là đồ thị đó phải liên thông
Trang 17Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hình 1.18 Hình 1.19
Hình 1.20 Hình 1.21
Hình 1.18 đồ thị G
Hình 1.19, 1.20, 1.21 cây khung của đồ thì G
1.3.3 Cây khung cực tiểu
Định nghĩa : Cho đồ thị G vô hướng và liên thông với n đỉnh và m cạnh, cạnh
(u,v) có trọng số p(u,v) là một số dương Cây khung cực tiểu (còn gọi là cây bao trùm ngắn nhất) của G là cây khung với tổng trọng số của các cạnh trong
Trang 18Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hình 1.22: Đồ thị G
Hình 1.23
Cây khung cực tiểu của đồ thị G có trọng số = 30
1.3.4 Rừng khung, rừng khung cực tiểu
1.3.4.1 Rừng khung
Định nghĩa : Cho G là một đồ thị vô hướng gồm n đỉnh và m cạnh Hãy xác
định các cây khung trong mỗi mảnh liên thông của G Tập hợp các cây khung
đó được gọi là rừng khung của đồ thị G
Rừng là đồ thị mà mỗi thành phần liên thông của nó là một cây
Trang 19Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Định nghĩa: Cho đồ thị G vô hướng và liên thông với n đỉnh và m cạnh,
cạnh (u,v) có trọng số p(u,v) là một số dương Rừng khung cực tiểu của G là
rừng khung với tổng trọng số của các cạnh trong khung là nhỏ nhất
Trang 20Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Định nghĩa : Một cạnh trong đồ thị G đƣợc gọi là cầu hoặc cạnh trọng yếu
nếu xóa cạnh đó đi (giữ lại các đỉnh ở hai đầu), sẽ làm tăng số thành phần liên thông của đồ thị
cầu phải là cạnh khung, nghĩa là phải thuộc một cây hoặc rừng khung
Trang 21Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
1.3.7 Liên thông hóa
Đối với đồ thị vô hướng G ( V, E
G gọi là liên thông (connected) nếu luôn tồn tại đường đi giữa mọi cặp đỉnh phân biệt của đồ thị
Nếu G không liên thông thì chắc chắn nó sẽ là hợp của hai hay nhiều đồ thị conliên thông, các đồ thị con này đôi một không có đỉnh chung Các đồ thị con liên thông rời nhau như vậy được gọi là các thành phần liên thông của đồ thị đang xét
Khớp
Trang 22Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hình 1.29 : Đồ thị G và các thành phần liên thông G1, G2, G3 của nó
Đôi khi, việc xoá đi một đỉnh và tất cả các cạnh liên thuộc với nó sẽ tạo ra một đồ thị con mới có nhiều thành phần liên thông hơn đồ thị ban đầu, các đỉnh như thế gọi là đỉnh cắt hay điểm khớp
Hoàn toàn tương tự, những cạnh mà khi ta bỏ nó đi sẽ tạo ra một đồ thị có
nhiều thành phần liên thông hơn so với đồ thị ban đầu được gọi là một cạnh cắt hay một cầu
Trang 23Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hình 1.30 : Khớp và cầu
a Đồ thị vô hướng liên thông
Định nghĩa: Đồ thị vô hướng G = (V, E) đượ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ó
Định lý 1: Nếu bậc của mọi đỉnh đồ thị vô hướng G=<V,E> không nhỏ
hơn một nửa số đỉnh thì đồ thị đó liên thông
Định lý 2 : Đồ thị vô hướng liên thông là định hướng được khi và chỉ khi
mỗi cạnh của nó nằm trên ít nhất một chu trình
c
d
H2
Trang 24Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hình 1.31: Đồ thị G Hình 1.32: Đồ thị H
Trong hình 1.31 : Đồ thị G là liên thông
Trong hình 1.32 : Đồ thị H là không liên thông
Ta gọi đồ thị con của đồ thị G = (V, E) là đồ thị H = (W, F), trong đó W ⊆ V
và F ⊆ E
b Đồ thị có hướng liên thông
Đối với đồ thị có hướng có hai khái niệm liên thông phụ thuộc vào việc ta có xét đến hướng trên các cung hay không
Trang 25Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
nếu luôn luôn tìm được đường đi giữa 2 đỉnh bất kỳ của nó
Định nghĩa 2 : Đồ thị có hướng G=<X,U> được gọi là liên thông yếu nếu
đồ thị vô hướng tương ứng (tức là đồ thị đã cho được thay các cung bởi các cạnh) với nó là đồ thị liên thông
Rõ ràng nếu đồ thị là liên thông mạnh thì nó cũng là liên thông yếu, nhưng điều ngược lại là không luôn đúng, như chỉ ra trong ví dụ dưới đây
Hình 1.35 Đồ thị liên thông mạnh G và đồ thị liên thông yếu H
Trong hình 1.35 đồ thị G là liên thông mạnh, còn H là liên thông yếu nhưng
không là liên thông mạnh
Định nghĩa 3: Nếu e = (u, v) là cung của đồ thị có hướng G thì ta nói hai đỉnh
u và v là kề nhau, và nói cung (u, v) nối đỉnh u với đỉnh v hoặc cũng nói cung
Trang 26Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
(cuối) của cung (u,v)
Tương tự như khái niệm bậc, đối với đồ thị có hướng ta có khái niệm bán bậc
ra và bán bậc vào của một đỉnh
Định nghĩa 4: Ta gọi bán bậc ra ( bán bậc vào) của đỉnh v trong đồ thị có
hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và ký hiệu là deg + (v) (deg - (v))
Rất nhiều tính chất của đồ thị có hướng không phụ thuộc vào hướng trên các cung của nó Vì vậy, trong nhiều trường hợp sẽ thuận tiện hơn nếu ta bỏ qua hướng trên các cung của đồ thị Đồ thị vô hướng thu được bằng cách bỏ qua hướng trên các cung được gọi là đồ thị vô hướng tương ứng với đồ thị có hướng đã cho
1.4 BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
1.4.1 Ma trận kề và ma trận trọng số
Giả sử G=(V,E) là một đơn đồ thị với n đỉnh
Ma trận kề không- một cấp n x n
A=[aij] trong đó:
aij= 0 nếu không có cạnh nối đỉnh i với đỉnh j
aij=1 nếu có cạnh nối đỉnh i với đỉnh j
Trang 27Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Chú ý:Ma trận kề của một đơn đồ thị là ma trận đối xứng
Ma trận kề là một ma trận thưa khi đồ thị tương đối ít cạnh
Trong trường hợp mỗi cạnh {i,j} được gắn với một trọng số k nào đó
Ta thay ma trận không-một bằng ma trận trọng số A=[aij] trong đó:
aij=∞ nếu không có cạnh nối đỉnh i với đỉnh j
aij=k nếu có cạnh nối đỉnh i với đỉnh j có trọng số k
1.4.2 Ma trận liên thuộc
Một cách thường dùng nữa để biểu diễn đồ thị là dùng ma trận liên thuộc Giả sử G=(V,E) là một đồ thị vô hướng với các đỉnh v1, v2, vn và các cạnh là
e1, e2, em
Khi đó ma trận liên thuộc M=[mij] kích thước n x m trong đó:
mij=0 nếu cạnh ej không nối với đỉnh vi
mij=l nếu cạnh ej nối với đỉnh vi
Trang 28Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Khi đó ma trận liên thuộc tương ứng sẽ là:
Trang 29Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Người ta dùng danh sách liên kết đơn thuận hoặc nghịch để biểu diễn chúng dưới dạng đỉnh kề hoặc cạnh kề
Kết luận : Lý thuyết đồ thị là mảng rất lớn nằm trong toán rời rạc, đồ thị
đóng vai trò quan trọng làm cơ sở toán cho tin học và lý thuyết về cây khung được ứng dụng nhiều trong thực tiễn Vì vậy việc nghiên cứu cơ sở lý thuyết
đồ thị và tổng quan về cây khung là rất cần thiết giúp cho việc ứng dụng xây dựng các thuật toán của cây khung Trong phạm vi nghiên cứu đề tài, những vấn đề mà tôi nêu trên là một phần của lý thuyết đồ thị, nhằm mục đích phục
vụ cho quá trình nghiên cứu các chương sau
Trang 30
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
CHƯƠNG 2
TÌM HIỂU MỘT SỐ THUẬT TOÁN VỀ CÂY KHUNG
2.1 GIỚI THIỆU KỸ THUẬT FIND-UNION
Kỹ thuật Find-Union (Tìm-Gộp) dùng để quản lí hợp của các tập rời nhau
Ta minh hoạ kỹ thuật này qua bài toán sau:
Bài toán công viên:
Cô giáo dẫn các em thiếu nhi đi chơi công viên Lớp có n em mã số lần lượt từ 1 đến n Vào công viên, để các bạn khỏi lạc nhau, cô giáo qui định chia nhóm như sau:
Cô lần lượt đọc mã số của từng cặp hai bạn Hai bạn đó sẽ thuộc cùng nhóm Dĩ nhiên, nếu bạn A và B cùng nhóm, bạn B và C cùng nhóm thì cả ba
Trang 31Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
nhất trong nhóm sẽ làm nhóm trưởng Sau m lần ghép cặp như vậy thì các em được chia thành mấy nhóm, hãy liệt kê mã số của các bạn trong từng nhóm Input: text file Park.inp
- Dòng đầu tiên: hai số nguyên dương n và m,
- Dòng thứ i trong số m dòng tiếp theo: mỗi dòng hai số nguyên dương a b
là mã số của hai bạn được ghép vào cùng nhóm
Output: Hiển thị
- Dòng đầu tiên: k số lượng nhóm
- Tiếp đến là k dòng, mỗi dòng liệt kê danh sách một nhóm
Park.inp Output Ý nghĩa: Tổng cộng các em được chia thành 3
nhóm Nhóm thứ nhất gồm 3 bạn có số hiệu là 1, 2
và 5; Nhóm thứ hai 3 bạn: 3, 4 và 7 Nhóm cuối cùng có 2 bạn: 6 và 8
Điều lí thú trong kỹ thuật này là ở điểm nhóm trưởng chính là em mang
số hiệu nhỏ nhất trong nhóm Lúc đầu, chưa ghép cặp thì mỗi em tạo thành một nhóm riêng Như vậy, lúc đầu ta có n nhóm Vì mỗi nhóm chỉ có duy nhất 1 em nên chính em đó là nhóm trưởng của chính mình Ta mường tượng mỗi bạn j phải bám thắt lưng bạn đứng trước i trong cùng nhóm Theo qui
Trang 32Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Ta qui ước gọi d là mảng chứa thông tin liên kết giữa các phần tử trong
Bước 3 Quyết định xem ai sẽ là nhóm trưởng của nhóm gộp mới này Dễ
hiểu là nhóm trưởng mới sẽ là em có số hiệu nhỏ nhất trong 2 nhóm trưởng x
d [1] [2] [3] [4] [5] [6] [7] [8]
Trang 33Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
x < y Ta chỉ việc gán d[y] = x, yx Ý nghĩa của việc này là: cô giáo qui định nhóm trưởng y phải bám thắt lưng nhóm trưởng x Ta suy ra ngay rằng mọi em trong nhóm y đi theo nhóm trưởng y, mà y lại đi theo x nên mọi em trong nhóm y sẽ đi theo x Nếu x > y ta gán d[x] = y, xy với ý nghĩa tương
tự như trên Nếu x = y thì có nghĩa là i và j hiện ở trong cùng một nhóm (vì có cùng nhóm trưởng) nên ta không phải làm gì
Hãy quan sát lần lượt các hình dưới đây để phát hiện ra qui luật cập nhật từng cặp học sinh theo yêu cầu của cô giáo
Trang 34Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
d [1] [2] [3] [4] [5] [6] [7] [8]
Để cập nhật cặp (5,1) ta để ý rằng nhóm trưởng của 5 là 2, vì d[5] = 2, nhóm trưởng của 1 là 1, vì d[1] = 1 Vì 1 < 2 nên ta cho nhóm trưởng 2 bám vào nhóm trưởng 1, tức là gán d[2] = 1, 21
d [1] [2] [3] [4] [5] [6] [7] [8]
Trang 35Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hàm Init khởi trị mảng d[1 n], d[i] = i với ý nghĩa lúc đầu mỗi em tạo thành một nhóm riêng biệt với nhóm trưởng là chính mình
và chỉ khi x và y có cùng nhóm trưởng, tức là Find(x) = Find(y)
- Nếu 2 em x và y thuộc 2 nhóm khác nhau, Find(x) ≠ Find(y), thì ta thực
sự gộp 2 nhóm này và hàm Union cho ra giá trị 1
int Union(int x, int y) {
x = Find(x); y = Find(y);
if (x == y) return 0;
if (x < y) d[y] = x;
Trang 36Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
return 1;
}
Việc cần làm cuối cùng là liệt kê thành viên của mỗi nhóm Ta duyệt lại mảng d, mỗi khi tìm được một nhóm trưởng i theo hệ thức d[i] = i, do i là nhóm trưởng nên mọi thành viên của nhóm này đều có số hiệu lớn hơn i Do đặc điểm này nên ta chỉ cần duyệt tiếp mảng d kể từ j = i+1 đến n, nếu nhóm trưởng của j là i thì ta hiển thị thành viên j
Nhớ rằng lúc đầu ta có tổng cộng n nhóm Mỗi khi ta gộp thực sự 2 nhóm, tức là khi Union(x,y) = 1 thì số lượng nhóm sẽ giảm đi 1 Nhờ nhận xét này ta dễ dàng tính được số nhóm tại thời điểm kết thúc
Kết quả của thuật toán sử dụng kỹ thuật Find-Union không phụ thuộc vào trật tự duyệt các cặp ghép
Độ phức tạp tính toán: Hàm Find thực hiện tối đa n bước tham chiếu x = d[x] Hàm Union gọi hàm Find do đó có độ phức tạp O(n) Tổng cộng lại, với m cặp ghép ta có độ phức tạp cỡ n.m – tuyến tính theo chiều dài input
Ghi nhớ: Để vận dụng kỹ thuật Find-Union ta cần:
1 Khai báo một mảng nguyên d, khởi trị d[i] = i với i = 1 n;
2 Cài đặt hàm Find;
3 Cài đặt hàm Union
Trong các mục tiếp theo ta sẽ trình bày các ứng dụng kỹ thuật Union vào các bài toán trên đồ thị
Find-Trong tài liệu này, nếu không ghi chú gì thêm, ta ngầm hiểu các đồ thị
được cho là đơn đồ thị hữu hạn
2.2 THUẬT TOÁN TÌM CÂY KHUNG, CÂY KHUNG CỰC TIỂU 2.2.1 Thuật toán tìm cây khung