Tính cấp thiết của đề tài Đồ thị được định nghĩa là một cặp G = V, E trong đó: V là tập các đỉnh hoặc node, E là tập các cung hoặc liên kết, đó là 2 tập con phần tử của V tức là một cạn
Trang 1Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi Các
số liệu, kết quả đánh giá, nhận xét và các đề xuất cải tiến mới nêu trong Luận văn là trung thực và chưa từng được ai công bố trong bất
kỳ công trình nào khác
Tôi xin cam đoan rằng mọi sự giúp đỡ cho việc thực hiện Luận văn này cũng như các trích dẫn hay tài liệu học thuật tham khảo đã được cảm ơn đến tác giả hay ghi rõ ràng nguồn gốc thông tin trích dẫn trong Luận văn
Học viên thực hiện Luận văn
TRẦN BÌNH AN
Trang 2Trước hết, cho tôi được gửi lời cảm ơn đến sự hướng dẫn và giúp đỡ tận tình của PGS TSKH Nguyễn Xuân Huy
Xin cảm ơn các Thầy/Cô tại trường Đại học Công nghệ Thông tin và Truyền thông Thái Nguyên đã sát cánh và cung cấp cho tôi những kiến thức quí báu trong suốt thời gian học tập và nghiên cứu thực hiện luận văn Tôi cũng in gửi lời cảm ơn đến gia đình, bạn bè cùng những người thân đã luôn quan tâm và giúp đỡ tôi trong suốt thời gian học tập, nghiên cứu để hoàn thành luận văn này
Luận văn không thể tránh khỏi những sai sót, rất mong nhận được ý kiến đóng góp của Thầy/Cô và các bạn để luận văn được hoàn thiện hơn Tôi xin chân thành cảm ơn
Thái Nguyên, tháng 4 năm 2016
TRẦN BÌNH AN
Trang 3MỤC LỤC
LỜI CAM ĐOAN
LỜI CẢM ƠN
MỤC LỤC i
DANH MỤC TỪ VIẾT TẮT iii
DANH MỤC CÁC BẢNG iv
DANH MỤC CÁC HÌNH v
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 3
2.1 Đối tượng nghiên cứu 3
2.2 Phạm vi nghiên cứu 3
3 Hướng nghiên cứu của đề tài 3
3.1 Về lý thuyết: 3
3.2 Về thực nghiệm: 3
4 Những nội dung nghiên cứu chính 4
Chương 1 TỔNG QUAN VỀ LÝ THUYẾT ĐỒ THỊ HỮU HẠN 5
1.1 Đồ thị và các khái niệm liên quan 5
1.1.1 Định nghĩa đồ thị 5
1.1.2 Các loại đồ thị 7
1.1.3 Một số dạng đồ thị đặc biệt 9
1.1.4 Bậc của đồ thị 12
1.1.5 Đường đi, chu trình, tính liên thông của đồ thị 14
1.2 Biểu diễn đồ thị trên máy tính 16
1.2.1 Ma trận kề, ma trận trọng số 16
1.2.2 Danh sách cạnh (cung) 19
1.2.3 Danh sách kề 22
Chương 2 KỸ THUẬT FIND – UNION TRONG XỬ LÝ ĐỒ THỊ 23
2.1 Kỹ thuật FIND – UNION 23
2.2 Những bài toán cơ bản trong lý thuyết đồ thị 30
Trang 42.2.1 Thành phần liên thông 30
2.2.2 Cây khung 33
2.2.3 Cây khung cực tiểu 35
2.2.4 Rừng khung 36
2.2.4 Cầu 40
2.2.5 Đỉnh khớp 45
Chương 3 MỘT SỐ ỨNG DỤNG 48
3.1 Một số ứng dụng 48
3.2 Bài toán “Giao thông trong ứng phó thiên tai” 48
3.3 Hướng giải quyết bài toán 50
3.3.1 Phân tích bài toán 50
3.1.2 Hướng giải quyết bài toán 50
3.3.3 Demo 55
KẾT LUẬN 61
HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 62
TÀI LIỆU THAM KHẢO 63
PHỤ LỤC 64
Trang 5 Thuộc, nếu a A: Ta nói
a là phần tử con của tập A
Member, if A is a set and
a is one of the objects of
A, this is denoted a ∈ A
>; ≥ Lớn hơn; lớn hơn hoặc
Trang 6DANH MỤC CÁC BẢNG
Bảng 1.1 Biểu diễn ma trận vô hướng không có trọng số bằng ma trận 16
Bảng 1.2 Biểu diễn đồ thị có hướng có trọng số bằng ma trận 18
Bảng 1.3 Biểu diễn đồ thị vô hướng có trọng số bằng ma trận 19
Bảng 1.4 Biểu diễn đồ thị không trọng số bằng danh sách cạnh (cung) 21
Bảng 1.5 Biểu diễn đồ thị có trọng số bằng danh sách cạnh có trọng số 21
Bảng 1.6 Biểu diễn đồ thị bằng danh sách kề 22
Bảng 2.1 File đồ thị vào G gồm 9 đỉnh, 6 cạnh và kết quả đầu ra 23
Bảng 2.2 Đồ thị G gồm 9 đỉnh, 6 cạnh 31
Bảng 2.3 File dữ liệu vào và ra của đồ thị G 9 đỉnh, 12 cạnh 35
Bảng 3.1 Đặt số hiệu cho huyện Bát Xát và các xã 55
Bảng 3.2 Kết quả chạy chương trình kiểm tra tính liên thông 57
Bảng 3.3 Kết quả chạy chương trình cây khung 59
Bảng 3.4 Khoảng cách từ các xã đến xã Trịnh Tường 60
Trang 7DANH MỤC CÁC HÌNH
Hình 1.1 Các mô hình đồ thị 6
Hình 1.2 Đồ thị hữu hạn 6
Hình 1.3 Đơn đồ thị vô hướng 8 đỉnh 7 cạnh 7
Hình 1.4 Đơn đồ thị có hướng 8 đỉnh 7 cạnh 8
Hình 1.5 Đồ thị hỗn hợp 8
Hình 1.6 Đồ thị đầy đủ 9
Hình 1.7 Đồ thị vòng C1, C2, C3 10
Hình 1.8 Đồ thị bánh xe W1, W2, W3 10
Hình 1.9 Đồ thị lập phương Q1, Q2, Q3 10
Hình 1.10 Đồ thị 2 phía K2,3, K3,3, K3,4 11
Hình 1.11 Đồ thị phẳng K 12
Hình 1.12 Đồ thị vô hướng 12
Hình 1.13 Đồ thị có hướng 13
Hình 1.14 Đường đi trên đồ thị 14
Hình 1.15 Đồ thị không liên thông 15
Hình 1.16 Đồ thị vô hướng không có trọng số G 16
Hình 1.17 Đồ thị G có hướng, có trọng số 18
Hình 1.18 Đồ thị vô hướng G có trọng số 19
Hình 1.19 Đồ thị vô hướng không có trọng số G 20
Hình 1.20 Đồ thị vô hướng có trọng số G 21
Hình 1.21 Đồ thị vô hướng không có trọng số và có trọng số 22
Hình 2.1 Khởi trị danh sách d[i] Error! Bookmark not defined.5 Hình 2.2 Cập nhật cạnh (1, 2) 26
Hình 2.3 Cập nhật cạnh (3, 6) 27
Hình 2.4 Cập nhật cạnh (2, 7) 27
Hình 2.5 Cập nhật cạnh (3, 8) 27
Hình 2.6 Cập nhật cạnh (5, 9) 28
Hình 2.7 Cập nhật cạnh (4, 9) 29
Trang 8Hình 2.8 Các mảnh liên thông của đồ thị G 31
Hình 2.9 Đồ thị liên thông G có cây khung là nét in đậm 35
Hình 2.10 Rừng khung của đồ thị G 37
Hình 2.11 Biểu diễn cầu, cạnh trọng yếu 41
Hình 3.1 Bản đồ huyện Bát Xát 55
Hình 3.2 Mô hình hóa các tuyến đường huyện Bát Xát 57
Hình 3.3 Cây khung cực tiểu của mảnh liên thông với xã Trịnh Tường 60
Trang 9MỞ ĐẦU
1 Tính cấp thiết của đề tài
Đồ thị được định nghĩa là một cặp G = (V, E) trong đó: V là tập các đỉnh hoặc node, E là tập các cung hoặc liên kết, đó là 2 tập con phần tử của
V (tức là một cạnh có liên quan đến hai đỉnh và các mối liên hệ được biểu diễn như một cạnh có thứ tự của các đỉnh với các cạnh cụ thể)
Trong khoa học máy tính, đồ thị được sử dụng để biểu diễn mạng truyền thông, tổ chức dữ liệu, thiết bị tính toán, tính toán dòng.Ví dụ, cấu trúc liên kết của một website có thể biểu diễn bởi một đồ thị có hướng, trong đó các đỉnh biểu diễn các trang web và các cạnh có hướng biểu diễn đường dẫn từ một trang tới một trang khác.Một cách tiếp cận tương tự cũng
có thể giải quyết các vấn đề trong du lịch, sinh học, thiết kế chíp máy tính
và nhiều vấn đề khác nữa Do đó, việc phát triển các thuật toán để xử lý đồ thị là vấn đề quan tâm lớn của khoa học máy tính
Lý thuyết đồ thị cũng thường được sử dụng nghiên cứu phân tử trong hóa học và vật lý Trong vật lý chất rắn, cấu trúc ba chiều của cấu trúc nguyên tử mô phỏng phức tạp có thể được nghiên cứu định lượng bằng cách thu thập số liệu thống kê về các đặc tính lý thuyết đồ thị liên quan đến các cấu trúc liên kết của các nguyên tử Trong hóa học một đồ thị biểu diễn một mô hình tự nhiên cho một phân tử, nơi đỉnh biểu diễn cho các nguyên
tử và các liên kết cạnh.Cách tiếp cận này đặc biệt được sử dụng trong xử lý máy tính của cấu trúc phân tử, từ biên tập hóa học tới tìm kiếm cơ sở dữ liệu
Trong vật lý thống kê, đồ thị có thể biểu diễn các kết nối cục bộ giữa
sự tương tác của các bộ phận của một hệ thống, cũng như sự biến đổi của một tiến trình vật lý trên hệ thống Đồ thị cũng được sử dụng để biểu diễn các vi kênh của môi trường xốp, trong đó các đỉnh biểu diễn cho các lỗ chân lông và các cạnh biểu diễn cho kênh nhỏ hơn nối các lỗ chân lông
Trang 10Trong xã hội, người ta có thể dùng lý thuyết đồ thị để đo độ uy tín của một diễn viên hoặc tìm hiểu phạm vi lan rộng của một tin đồn, đặc biệt là thông qua việc sử dụng các phần mềm phân tích mạng xã hội…
Tương tự như vậy, lý thuyết đồ thị cũng hữu ích trong sinh học như giúp ích cho những nỗ lực bảo tồn, nơi một đỉnh có thể đại diện cho khu vực mà một số loài tồn tại (hoặc môi trường sống) và các cạnh đại diện cho con đường di cư, hoặc di chuyển giữa các vùng Những thông tin này rất quan trọng khi nhìn vào mô hình sản xuất giống hoặc theo dõi sự lây lan của dịch bệnh, ký sinh trùng hoặc làm thế nào thay đổi đối với phong trào thể ảnh hưởng đến các loài khác
Trong toán học, đồ thị hữu ích trong hình học và một số phần của cấu trúc liên kết như lý thuyết liên kết.Lý thuyết đồ thị đại số liên kết chặt chẽ với các lý thuyết nhóm
Một số cấu trúc đồ thị có thể gán trọng số cho mỗi cạnh của đồ thị.Đồ thị có trọng số được sử dụng để biểu diễn cấu trúc trong đó cặp kết nối có một vài giá trị số.Ví dụ, nếu một đồ thị đại diện cho mạng lưới đường bộ thì trọng số đại diện cho độ dài quãng đường
Qua đó, học viên nhận thấy lý thuyết đồ thị được ứng dụng trong mọi lĩnh vực của cuộc sống, bằng cách biểu diễn này hay biểu diễn khác ta có
mô hình hóa vấn đề ta quan tâm thông qua biểu diễn vấn đề đó bằng đồ thị
và áp dụng lý thuyết đồ thị vào giải quyết được vấn đề Nhận thức được tầm quan trọng của lý thuyết đồ thị trong cuộc sống nên học viên đã chọn
đề tài khảo sát tính liên thông của đồ thị bằng kỹ thuật Find - Union và ứng dụng nhằm mục đích sau:
- Tìm hiểu các khái niệm về đồ thị hữu hạn
- Tìm hiểu về tính liên thông của đồ thị
- Tìm hiểu kỹ thuật Find – Union
Trang 11- Tìm hiểu các thuật toán liên quan đến đồ thị hữu hạn
- Áp dụng kỹ thuật Find – Union xây dựng một số ứng dụng giải quyết một số vấn đề trong thực tiễn
2 Đối tượng và phạm vi nghiên cứu
2.1 Đối tượng nghiên cứu
- Tổng quan về đồ thị và đồ thị hữu hạn liên thông
- Tìm hiểu kỹ thuật Find - Union
- Tìm hiểu một số bài toán áp dụng kỹ thuật Find – Union trong lý thuyết đồ thị như: Bài toán xác định thành phần liên thông, bài toán chu trình, bài toán cây khung, bài toán cây khung cực tiểu, bài toán mạng, bài toán rừng khung, bài toán rừng khung cực tiểu…
2.2 Phạm vi nghiên cứu
- Tập trung vào khảo sát tổng quan về lý thuyết cũng như cài đặt các
bài toán áp dụng kỹ thuật Find – Union trong đồ thị hữu hạn
3 Hướng nghiên cứu của đề tài
3.1 Về lý thuyết:
- Lý thuyết về đồ thị hữu hạn
- Tìm hiểu thuật toán Find – Union
- Tìm hiểu các bài toán về đồ thị hữu hạn áp dụng thuật toán Find – Union
- Vận dụng các công cụ toán học, lý thuyết học rời rạc
3.2 Về thực nghiệm:
- Tìm hiểu ngôn ngữ, môi trường và kỹ thuật lập trình
- Xây dựng hệ thống chương trình để thử nghiệm và đánh giá kết quả
Trang 12- Hình thành một số bài toán ứng dụng vào thực tiễn và xây dựng qui trình giải
4 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 3 chương cụ thể như
sau:
Trang 13Chương 1 TỔNG QUAN VỀ LÝ THUYẾT ĐỒ THỊ HỮU HẠN
Khái niệm lý thuyết đồ thị đầu tiênđược biết đến trong bài báo của Leonhard Euler về Bảy cây cầu ở Königsberg, xuất bản năm 1736.Trong bài báo, ông đã sử dụng khái niệm lý thuyết đồ thị để đưa
ra hướng giải quyết cho bài toán.Kể từ đây, việc sử dụng lý thuyết đồ thị ngày càng phổ biến, nó giúp nhiều nhà toán học mô phỏng và giải quyết nhiều bài toán lớn của thế giới
Năm 1845, Gustav Kirchhoff đưa ra Định luật Kirchhoff cho mạch điện để tính điện thế và cường độ dòng điện trong mạch điện
Năm 1852 Francis Guthrie đưa ra bài toán bốn màu về vấn đề liệu chỉ với bốn màu có thể tô màu một bản đồ bất kì sao cho không có hai nước nào cùng biên giới được tô cùng màu.Bài toán này được xem như đã khai sinh ra lí thuyết đồ thị, và chỉ được giải sau một thế kỉ vào năm 1976 bởi Kenneth Appel và Wolfgang Haken.Trong khi cố gắng giải quyết bài toán này, các nhà toán học đã phát minh ra nhiều thuật ngữ và khái niệm nền tảng cho lí thuyết đồ thị
Trong khoảng vài mươi năm trở lại đây, cùng với sự ra đời của máy tính điện tử và sự phát triển nhanh chóng của tin học, lý thuyết đồ thị càng được quan tâm đến nhiều hơn.Thí dụ như trong kiến trúc mạng máy tính, tổ chức và tìm kiếm dữ liệu trên mạng, chỉ dẫn đườngđi
Trong chương 1 sẽ trình bày những khái niệm tổng quan cơ bản về lý thuyết đồ thị, cách biểu diễn đồ thị trên máy tính như: định nghĩa một đồ thị, các loại đồ thị, bậc của đồ thị, tính liên thông của đồ thị, đường đi, chu trình của đồ thị…
1.1 Đồ thị và các khái niệm liên quan
1.1.1 Định nghĩa đồ thị
Chúng ta thường xuyên nhìn thấy hoặc đã sử dụng bản đồ giao thông của một thành phố, sơ đồ tổ chức một cơ quan, sơ đồ khối tính toán của
Trang 14một thuật toán, sơ đồ mạng máy tính , đó chính là những thí dụ cụ thể về
đồ thị
Thí dụ: Một số dạng của đồ thị trong thực tế
Mạng máy tính Sơ đồ giao thông Mạng nơron
Hình 1.1.Các mô hình đồ thị
Đồ thị (Graph, ký hiệu G): 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 đó Được mô tả:
G = (V, E) trong đó:
V gọi là tập các đỉnh(Vertices) và E gọi là tập các cạnh(Edges) Có
thể coi E là tập các cặp (u, v) với u và v là hai đỉnh của V [4]
Hình 1.2.Đồ thị hữu hạn
Đồ thị G cho ở hình 1.2 với tập ác đỉnh V = {a, b, c, d, e} và tập các cạnh E ={(a, b), (b, c), (b, e), (c, e), (c, d)}
Nếu (a, b) là một cạnh của đồ thị thì ta nói rằng đỉnh b kề với đỉnh a
và cả hai đỉnh a và b kề với cạnh (a, b)
Trong đồ thị ở hình 1.2 thì hai đỉnh a và c kề với đỉnh b, ba đỉnh a, c
Trang 15và e kề với đỉnh b Do vậy, ta có thể định nghĩa đồ thị bằng ánh xạ kề như sau:
Về bản chất, đồ thị là một tập hợp các đối tượng được biểu diễn bằng các đỉnh và giữa các đối tượng này có một quan hệ nhị nguyên biểu diễn bằng các cạnh
Cặp đỉnh (x, y) ∈ E không sắp thứ tự được gọi là cạnh vô hướng, còn nếu nó có sắp thứ tự thì được gọi là cạnh có hướng
1.1.2 Các loại đồ thị
1.1.2.1 Đồ 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ự [8]
Hình 1.3.Đơn đồ thị vô hướng 8 đỉnh 7 cạnh
Trang 161.1.2.2 Đồ 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 [8]
Hình 1.4.Đơn đồ thị có hướng 8 đỉnh 7 cạnh
1.1.2.3 Đồ thị hỗn hợp
Đồ thị G = (V,E) được gọi là đồ thị hỗn hợp nếu tất cả các cạnh u E
mà cặp đỉnh thuộc nó u = (x,y) có nhiều hơn một đường đi [3]
Hình 1.5 Đồ thị hỗn hợp
Trang 171.1.3 Một số dạng đồ thị đặc biệt
1.1.3.1 Đồ thị đầy đủ
Đồ thị đầy đủ n đỉnh, ký hiệu bởi Kn, là đơn đồ thị vô hướng mà giữa
hai
đỉnh bất kỳ của nó luôn có cạnh nối [3]
Thí dụ: Các đồ thị đầy đủ K1, K2, K3 cho trong hình 1.6
Trang 18Hình 1.7
Hình 1.7 Đồ thị vòng C 1 , C 2 , C 3 1.1.3.3 Đồ thị bánh xe
Đồ thị bánh xeWnthu được từ Cn bằng cách bổ sung vào một đỉnh mới
nốivới tất cả các đỉnh của Cn [4]
Thí dụ: Đồ thị bánh xe W1, W2, W3như hình 1.8
Hình 1.8 Đồ thị bánh xe W1, W2, W3
1.1.3.4 Đồ thị lập phương
Đồ thị lập phương n đỉnh Qnlà đồ thị với các đỉnh biểu diễn 2n xâu nhị
phânđộ dài n Hai đỉnh của nó gọi là kề nhau nếu như hai xâu nhị phân
tương ứng chỉ khác nhau 1 bit [4]
Thí dụ: Đồ thị vòng Q1, Q2, Q3như hình 1.9
Hình 1.9 Đồ thị lập phương Q1, Q2, Q3
Trang 191.1.3.5 Đồ thị hai phía
Đơn đồ thị G=(V,E) được gọi là đồ thị hai phía nếu như tập đỉnh V
của nó cóthể phân hoạch thành hai tập X và Y sao cho mỗi cạnh của đồ thị
chỉ nối mộtđỉnh nào đó trong X với một đỉnh nào đó trong Y Khi đó ta sẽ
sử dụng ký hiệu G=(X∪Y, E) để chỉ đồ thị hai phía với tập đỉnh X∪Y [4]
Định lý: Đơn đồ thị là đồ thị hai phía khi và chỉ khi nó không chứa
chu trìnhđộ dài lẻ
Để kiểm tra xem một đồ thị liên thông có phải là hai phía hay không ta
có thểáp dụng thủ tục sau:
- Cho v là một đỉnh bất kỳ của đồ thị
- Đặt X={v}, còn Y là tập các đỉnh kề của v Khi đó các đỉnh kề của
các đỉnhtrong Y phải thuộc vào X Ký hiệu tập các đỉnh như vậy là T
- Vì thế nếu phát hiện T∩Y # thì đồ thị không phải là hai phía, kết
Trang 201.1.3.6 Đồ thị phẳng
Đồ thị được gọi là đồ thị phẳng nếu ta có thể vẽ nó trên mặt phẳng sao
chocác cạnh của nó không cắt nhau ngoài ở đỉnh Cách vẽ như vậy sẽ được
gọi làbiểu diễn phẳng của đồ thị.z
Thí dụ: Đồ thị K như hình 1.11 bên dưới là đồ thị phẳng, vì ta có thể
vẽ nótrên mặt phẳng sao cho các cạnh của nó không cắt nhau ngoài ở đỉnh
Bậc của đỉnh v trong đồ thị G, ký hiệu deg(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í dụ 1.12 ta có deg(1) =
2, deg(2) = 3, d(3) = 2, deg(4) = 2, deg(5) = 3, deg(6) = 1
Trang 21Nế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ị
Trong hình 1.12 Δ(G) = 3, δ(G) = 1 [8]
1.1.4.2 Bậc của đồ thị có hướng
Hình 1.13 Đồ thị có hướng
Xét đồ thị cho trong hình 1.13 Ta có:
deg-(a)=1, deg-(b) = 2, deg-(c) =2, deg-(b) =2, deg-(e) = 2
deg+(a) = 3, deg+(b) =1, deg+(c) = 1, deg+(d) = 2, deg+(e) = 2
Bậccủa một đỉnh vlà sốcạnh liên thuộcvớiv(trong đó,khuyênđược tính hai lần) Bậc củavđược ký hiệu làdeg(v)
Trong mộtđồ thị có hướng,bậc trongcủa đỉnhvlà số cung kết thúc tạiv, cònbậc ngoàilà số cung xuất phát từv Bậc trong và bậc ngoài
củavđược ký hiệu làdeg+(v)vàdeg-(v) Do đó,deg(v) = deg+(v) + deg-(v) Đỉnh với deg(v) được gọi là đỉnh cô lập Đỉnh có deg(v) = 1 đượ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ó deg+(v) được gọi là đỉnh phát, đỉnh có deg-(v) là đỉnh thu [5]
Trang 22Trong đồ thị có hướng G, bậc ngoài deg+(v), số cung xuất phát từ đỉnh v, và bậc trong deg-(v), số cung đi vào đỉnh v Bậc deg+ (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 Δ+(G) và δ+(G); bậc trong cực đại và cực tiểu, Δ-(G)
và δ-(G) Trong ngữ cảnh rõ ràng, có thể bỏ qua chỉ số dưới G [8]
1.1.5 Đường đi, chu trình, tính liên thông của đồ thị
Đường đi có độ dài k từ đỉnh u đến đỉnh v trên đồ thị vô hướng G =
Đỉnh u là đỉnh đầu, đỉnh v là đỉnh cuối của đường đi
Chu trình: là đường đi có đỉnh đầu trùng với đỉnh cuối (u = v)
Đường đi đơn: là đường đi mà không có cạnh nào lặp lại
Chu trình đơn: là chu trình mà không có cạnh nào lặp lại
Thí dụ: Tìm các đường đi, chu trình trong đồ thị vô hướng như hình 1.14
Hình 1.14 Đường đi trên đồ thị
+ a, b, c, d là đường đi đơn độ dài 3 + a, b, f, không là đường đi vì (b,
Trang 23f) không phải là cạnh của đồ thị
+ Dãy a, b, c, f, e, a là chu trình độ dài 5
+ Đường đi a, b, c, f, e, b, c có độ dài 6 không phải là đường đi đơn vì cạnh (b, c) xuất hiện hai 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ự, chỉ có điều khác biệt duy nhất là ta phải chú ý tới các cung của đồ thị
Đồ thị liên thông: Đồ thị vô hướng G = (V, E) được gọi là liên thông
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ị con liê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 [1] Một đồ thị được coi là hoàn toàn không liên thông nếu không có đường đi giữa hai đỉnh bất kỳ trong đồ thị.Đây chỉ là một cái tên khác để miêu tả một đồ thị rỗng hoặc một tập độc lập.Một đồ thị có hướng
được coi là liên thông mạnh nếu từ mỗi đỉnh đều đến được mọi đỉnh khác.Ngược lại, đồ thị có hướng được coi là liên thông yếu nếu đồ thị vô
hướng nền tảng của nó là đồ thị liên thông [4]
Thí dụ: Kiểm tra tính liên thông của đồ thị hình 1.15
Đồ thị này không liên thông vì có đỉnh g là đỉnh cô lập nên không có đường đi từ đình bất kỳ đến đỉnh g
Hình 1.15 Đồ thị không liên thông
Trang 24Chu trình sơ cấp: là chu trình không đi qua một đỉnh quá 1 lần (hay đi
Việc chọn cấu trúc dữ liệu nào để biểu diễn đồ thị có tác động rất lớn đến hiệu quả thuật toán.Vì vậy, lựa chọn cấu trúc dữ liệu thích hợp biểu diễn đồ thị sẽ phụ thuộc vào từng bài toán cụ thể
Giả sử G = (V, E) là một đơn đồ thị có số đỉnh (ký hiệu |V|) là n, không mất tính tổng quát có thể coi các đỉnh được đánh số 1, 2, …, n Khi
đó ta có thể biểu diễn đồ thị bằng một ma trận vuông A = [a[i, j]] cấp n, trong đó:
+ a[i, j] = 1 nếu (i, j) ∈ E
+ a[i, j] = 0 nếu (i, j) E
Với ∀i, giá trị của a[i, i] có thể đặt tuỳ theo mục đích, thông thường nên đặt bằng 0
Đối với đa đồ thị thì việc biểu diễn cũng tươngtự trên, chỉ có điều nếu như (i, j) là cạnh thì không phải ta ghi số 1 vào vị trí a[i, j] mà là ghi số cạnh nối giữa đỉnh i và đỉnh j [3]
Hình 1.16 Đồ thị vô hướng không có trọng số G
Trang 25Bảng 1.1 Biểu diễn ma trận vô hướng không có trọng số bằng ma trận
+ a[i, j] = TRUE nếu (i, j) ∈ E và a[i, j] = FALSE nếu (i, j) E
Ưu điểm của ma trận kề:
+ Đơn giản, trực quan, dễ cài đặt trên máy tính
+ Để kiểm tra xem hai đỉnh (u, v) của đồ thị có kề nhau hay không, ta chỉ việc kiểm tra bằng một phép so sánh: a[u, v] ≠ 0
Trang 26Nhược điểm của ma trận kề:
+ Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận kề luôn luôn đòi hỏi 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 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 a[u, v] ≠ 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
Thí dụ: Tìm ma trận kề của đồ thị có hướng, có trọng số như hình 1.17
Hình 1.17 Đồ thị G có hướng, có trọng số Bảng 1.2 Biểu diễn đồ thị có hướng có trọng số bằng ma trận
Thí dụ: Tìm ma trận kề của đồ thị có trọng số như hình 1.18
Trang 27Hình 1.18 Đồ thị vô hướng G có trọng số Bảng 1.3 Biểu diễn đồ thị vô hướng có trọng số bằng ma trận
1.2.2 Danh sách cạnh (cung)
Trong trường hợp đồ thị thưa (đồ thị có số cạnh m 6n), người ta
thường biểu diễn đồ thị dưới dạng danh sách cạnh
Trong phép biểu diễn này, chúng ta sẽ lưu trữ danh sách tất cả các cạnh (cung) của đồ thị vô hướng (có hướng).Mỗi cạnh (cung) e (x, y) được tương ứng với hai biến dau[e], cuoi[e]
Như vậy, để lưu trữ đồ thị, ta cần 2m đơn vị bộ nhớ, đây là ưu điểm
của việc lưu trữ bằng danh sách kề
Nhược điểm lớn nhất của phương pháp này là để nhận biết những
cạnh nào kề với cạnh nào chúng ta cần m phép so sánh trong khi duyệt qua tất cả m cạnh (cung) của đồ thị Nếu là đồ thị có trọng số, ta cần thêm m đơn vị bộ nhớ để lưu trữ trọng số của các cạnh [6]
Trang 28Thí dụ: Biểu diễn đồ thị bằng danh sách cạnh như hình 1.19
Hình 1.19 Đồ thị vô hướng không có trọng số G
Trang 29Bảng 1.4 Biểu diễn đồ thị không trọng số bằng danh sách cạnh (cung)
Trang 301.2.3 Danh sách kề
Trong rất nhiều ứng dụng, cách biểu diễn đồ thị dưới dạng danh sách
kềthường được sử dụng Trong biểu diễn này, với mỗi đỉnh v của đồ thị
chúng ta lưu trữ danh sách các đỉnh kề với nó mà ta ký hiệu là Ke(v), nghĩa
là Ke(v) = { u V: (u, v)E}
Với cách biểu diễn này, mỗi đỉnh i của đồ thị, ta làm tương ứng với
một danh sách tất cả các đỉnh kề với nó và được ký hiệu là List(i)
Để biểu diễn List(i), ta có thể dùng các kiểu dữ liệu kiểu tập hợp,
mảng hoặc danh sách liên kết [6]
Thí dụ: Biểu diễn danh sách kề của đồ thị vô hướng có trọng số và
không có trọng số như hình 1.21
Hình 1.21 Đồ thị vô hướng không có trọng số và có trọng số
Bảng 1.6 Biểu diễn đồ thị bằng danh sách kề
Trang 31Chương 2 KỸ THUẬT FIND – UNIONTRONG XỬ LÝ ĐỒ THỊ
Trong lý thuyết đồ thị, có nhiều thuật toán được cài đặt để giải quyết các bài toán quan trọng như: Bài toán tìm cây khung; Bài toán xác định chu trình; Bài toán xác định thành phần liên thông…
Chương 2 sẽ trình bày thuật toán FIND – UNION (Tìm – Gộp) để giải quyết các bài toán trên
2.1 Kỹ thuật FIND – UNION
Trong khoa học máy tính, kỹ thuật Find – Union là một thuật toán dùng để quản lý các tập rời nhau
Ta mô phỏng kỹ thuật Find – Union qua bài toán sau:
Cho một đồ thị hữu hạn n đỉnh có mã số từ 1 đến n Biết trước m cạnh (Ai, Bj), i = 1 n, j = 1 n Nối các cặp đỉnh với quy ước đỉnh có mã số lớn hơn sẽ nối (liên thông) với đỉnh có mã số nhỏ hơn, đỉnh có mã số nhỏ hơn gọi là nhóm trưởng Sau m lần nối cạnh hỏi đồ thị có bao nhiêu nhóm (thành phần liên thông) và mã số các đỉnh trong nhóm?
Ý nghĩa: Đồ thị được chia làm 3 thành phần liên thông (nhưng không
liên thông với nhau) Thành phần thứ nhất gồm 3 đỉnh có mã số là 1, 2, 7;
Trang 32Thành phần thứ 2 gồm 3 đỉnh có mã số là 3, 6, 8; Thành phần thứ 3 gồm 3đỉnh: 4, 5 và 9
Thuật toán
Function: FindUion()
Input: Text file
- Dòng đầu tiên: hai số nguyên dương m và n
- Dòng thứ i trong số m dòng tiếp theo là hai số nguyên dương
a và b là hai mã số hai đỉnh được nối với nhau
Output: Hiển thị
- Dòng đầu tiên: k là số lượng nhóm
- Tiếp đến là k dòng, mỗi dòng hiển thị danh sách một nhóm [2]
Method:
1 Khởi trị: d[i]:= i; i = 1 n;
2 For each (u, v) in danh sách L do 2.1 x = Find(u); // Tìm phần tử đại diện 2.2 y = Find(v); // Tìm phần tử đại diện 2.3 If (x == y) return 0;
Áp dụng thuật toán để phân tích thí dụ trên
Khi chưa có cạnh thì mỗi đỉnh là một nhóm riêng.Khi nối các cặp đỉnh thì đỉnh j nối với đỉnh j (theo quy ước j > i)
Ta sử dụng mảng nguyên một chiều d[1 n] để quản lí các nhóm Ta gán d[j] = i nếu đỉnh j phải nối vào đỉnh i là đỉnh có mã số nhỏ hơn mình: i
Trang 33 j nếu i< j Lúc đầu ta khởi trị d[i] = i; i = 1 n: i i, với ý nghĩa: lúc đầumỗi đỉnh tạo thành một nhóm Mảngd được gọi là mảng tham chiếu
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 tập con
Khởi trị mỗi đỉnh là một nhóm
d [1] [2] [3] [4] [5] [6] [7] [8] [9]
Hình 2.1Khởi trị danh sách d[i]
Mỗi khi xuất hiện đỉnh nối cạnh (i, j) thì ta hiểu là: nhóm có đỉnh i cần hợp (gộp) với nhóm có đỉnh j Đểghép cặp (i, j) ta thực hiện các bước sau đây:
Trang 34Nếu x = y thì có nghĩa là i và j hiện ở trong cùng một nhóm (thành phần liên thông) nên ta không phải làm gì
Chúng ta 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 đỉnh theo qui định
Trang 37Để gộp 2 nhóm: nhóm có đỉnh x và nhóm có đỉnh y ta lưu ý hai điểm sau đây:
- Rất có thể 2 đỉnh x và y hiện đã trong cùng một nhóm Trường hợp này ta không phải làm gì.Hàm sẽ cho giá trị 0 Ta thấy x và y cùng nhóm khi và chỉ khi x và y có cùng nhóm trưởng, tức là Find(x)
là nhóm trưởng nên mọi thành viên của nhóm này đều có mã số lớnhơ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ì tahiể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
Trong bài toán tối ưu, kỹ thuật Find – Union càng thể hiện rõ được tầm quan trọng khi thực hiện kiểm tra sự tồn tại chu trình Việc cài đặt thuật toán dễ dàng, khi hàm Union(x, y) = 0 thì cạnh (x, y) tạo thành
Trang 38chutrình và ngược lại khi Union(x, y) = 1 thì cạnh (x, y) không tạo thành chu trình [2]
Độ 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
2.2 Những bài toán cơ bản trong lý thuyết đồ thị
2.2.1 Thành phần liên thông
Cho đồ thị vô hướng G = (V, E) với n đỉnh V = {1, 2, …, n} và m cạnh (x,y) nối đỉnh x với đỉnh y
- Tínhsố thành phần liên thông
- Liệt kê tập đỉnh trong mỗi thành phần của G
Hướng giải quyết bài toán
Đồ thị vô hướng G được gọi là liên thông nếu từ một đỉnh bất kì i ta
có thể đi theo một số cạnh liền kề nhau của đồ thị để đến một đỉnh j bất kì Dãy các cạnh liền kề từ đỉnh i đến đỉnh j được gọi là một đường từ i đến j Với đồ thị vô hướng, khi có đường từ đỉnh i đến đỉnh j thì ta cũng có đường
từ đỉnh j đến đỉnh i Nếu G không liên thông thì G được chia thành các mảnh liên thông, còn gọi là thành phần liên thông, gồm một số đỉnh và cạnh của G Hãy tưởng tượng mỗi đỉnh của đồ thị như là một hạt cườm, cạnh nối hai đỉnh i và j chính sợi dây nối hai hạt i và j Khi đó, G là liên thông khi và chỉ khi ta cầm một hạt bất kì nhấc lên thì tất cả các hạt đều được nhấc theo Nếu G không liên thông thì mỗi lần nhấc một hạt ta được một mảnh lên thông gồm một số hạt được liên kết với nhau Ta đặt riêng mảnh đó ra, rồi nhấc một hạt bất kì trong số các hạt còn lại ta sẽ được mảnh liên thôngthứhai,…[2]
Nhận xét: G là liên thông khi và chỉ khi số mảnh liên thông của G là 1
Trang 40Hàm Union(x, y) có giá trị 1 nếu thành phần liên thông chứa đỉnh x được gộp với thành phần liên thông chứa đỉnh y, ngược lại, Union(x, y) có giá trị 0 nếu hai đỉnh x, y hiện đang nằm trên cùng một thành phần liên thông Hàm Union(x, y) cho giá trị ra là giảm số lượng thành phần liên thông của G, sau khi thực hiện hàm Union(x, y) thì x, y sẽ cùng một thành phần liên thông [2]
Cài đặt chương trình
int SoThanhPhanLienThong(){ // Đếm số thành phần liên thông
int i, x, y, k;
ifstream f(inf); // mo input file
f >> n >> m; // doc so dinh n va so canh m
Initd(); // Khoi tri mang tham chieu d
Để liệt kê các thành phần liên thông ta làm như sau:
Duyệt các đỉnh i trong mảng d, nếu i là nhóm trưởng, tức là Find(i) = i thì duyệt tiếp các đỉnh j = i+1 nvà thỏa điều kiện Find(j) = i , tức là j thuộc thành phần liên thông i thì hiển thị đỉnh j