NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Trương Bá Thái Giới tính: Nam Ngày, tháng, năm sinh: 15/01/1980 Nơi sinh: Thanh Hóa Chuyên ngành: Công nghệ thông tin MSHV: 1341860018 I- Tên đ
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
Trang 3CÔNG TRÌNH ĐƢỢC HOÀN THÀNH TẠI
Thành phần Hội đồng đánh giá Luận văn Thạc sĩ gồm:
(Ghi rõ họ, tên, học hàm, học vị của Hội đồng chấm bảo vệ Luận văn Thạc sĩ)
Xác nhận của Chủ tịch Hội đồng đánh giá Luận sau khi Luận văn đã đƣợc
sửa chữa (nếu có)
Chủ tịch Hội đồng đánh giá LV
Trang 4NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ tên học viên: Trương Bá Thái Giới tính: Nam
Ngày, tháng, năm sinh: 15/01/1980 Nơi sinh: Thanh Hóa
Chuyên ngành: Công nghệ thông tin MSHV: 1341860018
I- Tên đề tài: Bài Toán Cây Bao Trùm Trên Đồ Thị và Ứng Dụng
II- Nhiệm vụ và nội dung:
Tìm hiểu các thuật toán về tìm cây bao trùm trên đồ thị: thuật toán Borůvka, thuật toán Prim và thuật toán Kruskal Nghiên cứu và xây dựng ứng dụng bài toán người du lịch dựa vào cây bao trùm nhỏ nhất
III- Ngày giao nhiệm vụ: 18/8/2014
IV- Ngày hoàn thành nhiệm vụ: 15/3/2015
V- Cán bộ hướng dẫn: TS Võ Văn Tuấn Dũng
CÁN BỘ HƯỚNG DẪN KHOA QUẢN LÝ CHUYÊN NGÀNH
(Họ tên và chữ ký) (Họ tên và chữ ký)
Trang 5i
LỜI CAM ĐOAN
Tô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ả 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 cảm ơn và các thông tin trích dẫn trong luận văn đã được chỉ rõ nguồn gốc
Học viên thực hiện Luận văn
Trương Bá Thái
Trang 6
ii
LỜI CÁM ƠN
Tác giả luận văn xin chân thành cám ơn sự hướng dẫn tận tình của T.S Võ Văn Tuấn Dũng, đã truyền đạt những kinh nghiệm quý báu trong học tập, nghiên cứu khoa học và trong cuộc sống Tác giả xin trân trọng bày tỏ lòng kính trọng, lòng biết ơn sâu sắc đến Thầy
Tác giả luận văn xin chân thành cảm ơn phòng sau đại học cùng toàn thể giáo sư, tiến sĩ, cán bộ trường Đại học Công nghệ TP.HCM đã tận tình giảng dạy, giúp đỡ và tạo mọi điều kiện thuận lợi trong quá trình học tập tại trường
Học viên thực hiện Luận văn
Trương Bá Thái
Trang 7
iii
TÓM TẮT
Bài toán cây bao trùm nhỏ nhất là bài toán có vai trò trung tâm trong lý thuyết tối ưu tổ hợp, nẩy sinh trong nhiều ứng dụng và xuất hiện như một bài toán con trong nhiều bài toán về hình học và tổ hợp Bài toán này quan trọng không chỉ vì nó
là mô hình cơ bản trong lý thuyết tối ưu về mạng mà còn vì nó được dùng như một hình mẫu điển hình trong tối ưu tổ hợp đã kích thích nhiều hướng nghiên cứu mới Bài toán cây bao trùm nhỏ nhất có thể được xây dựng hiệu quả nhờ sử dụng các thuật toán dựa trên chiến thuật “tham lam” Có nhiều thuật toán tìm cây bao trùm nhỏ nhất Một trong những thuật toán đầu tiên thuộc về Borůvka (1926) Hai thuật toán khá quen thuộc là thuật toán Kruskal (1956) và thuật toán Prim (1957) Bài toán người du lịch được nghiên cứu dựa vào xấp xỉ dùng cây bao trùm nhỏ nhất được trình bày trong luận văn là bài toán NP khó
Trang 8iv
ABSTRACT
The problem of the minimum spanning tree problem is central role in combinatorial optimization theory, arises in many applications, and appears as a subproblem in many problems of geometry and combinatorics This problem is important not only because it is the basic model in the optimization of network theory, but also because it is used as a typical model of optimal combinations stimulate new research directions
The problem of the minimum spanning tree can be constructed efficiently using algorithms based on the strategy "greedy" There are many algorithms to find the minimum spanning tree One of the first algorithm belongs Borůvka (1926) Two algorithms familiar la Kruskal algorithm (1956) and Prim algorithm (1957) The problem of the study tour is based on the approximation using the minimum
spanning tree is presented in the thesis is NP problem
Trang 9v
MỤC LỤC
Chương 1 MỞ ĐẦU 11
1.1 Lý do chọn đề tài 11
1.2 Mục đích, đối tượng và phạm vi nghiên cứu 12
1.3 Ý nghĩa khoa học và thực tiễn của đề tài 12
1.4 Cấu trúc của luận văn 12
Chương 2 KHÁI NIỆM CƠ BẢN VỀ ĐỒ THỊ 14
2.1 Một số khái niệm 14
2.1.1 Khái niệm đồ thị 14
2.1.2 Các thuật ngữ cơ bản 16
2.1.3 Đường đi, chu trình và đồ thị liên thông 18
2.1.4 Một số dạng đồ thị đặc biệt 22
2.2 Biểu diễn đồ thị và tìm kiếm trên đồ thị 24
2.2.1 Biểu diễn đồ thị 24
2.2.2 Các thuật toán tìm kiếm trên đồ thị 27
2.3 Đồ thị Euler và đồ thị Hamilton 29
2.3.1 Đồ thị Euler 29
2.3.2 Đồ thị Hamilton 32
2.4 Cây và cây bao trùm của đồ thị 33
Chương 3 BÀI TOÁN CÂY BAO TRÙM NHỎ NHẤT 37
3.1 Nội dung và ý nghĩa bài toán 37
3.1.1 Nội dung bài toán 37
Trang 10vi
3.1.2 Một số ứng dụng của cây bao trùm nhỏ nhất 38
3.2 Một số thuật giải 39
3.2.1 Thuật toán Borůvka 40
3.2.2 Thuật toán Kruskal 43
3.2.3 Thuật toán Prim 48
3.3 Bài Toán xấp xỉ nhờ cây bao trùm nhỏ nhất(MST-based approximation) 54
3.3.1 Thuật toán Christofides 56
3.3.2 Phân tích thuật toán: 57
Chương 4 ỨNG DỤNG THUẬT TOÁN CHRISTOFIDES VÀO BÀI TOÁN NGƯỜI DU LỊCH 64
4.1 Phân tích yêu cầu 64
4.1.1 Sơ đồ Use Case 65
4.1.2 Đặc tả chi tiết 65
4.2 Đặc Tả Cấu Trúc Dữ Liệu 70
4.2.1 Lượt đồ quan hệ dữ liệu 71
4.2.2 Đặc tả cấu trúc bảng 72
4.3 Cài đặt và đánh giá hiệu quả thuật toán Christofides 72
4.3.1 Cài đặt thuật toán Christofides 72
4.3.2 Đánh giá hiệu quả thuật toán Christofides 74
4.4 Tính năng chính của chương trình 76
4.4.1 Màn hình chọn các địa điểm 76
Trang 11vii
4.4.2 Màn hình tính khoảng cách 77
4.4.3 Màn hình giải pháp 77
4.4.4 Màn hình kết quả 78
4.4.5 Màn hình tìm đường đi 78
4.4.6 Chức năng chính của ứng dụng 80
Chương 5 KẾT LUẬN VÀ KIẾN NGHỊ VỀ NHỮNG NGHIÊN CỨU TIẾP THEO 83 5.1 Kết quả đạt được 83
5.2 Lời kết 84
TÀI LIỆU THAM KHẢO 85
Trang 12
viii
9 Danh mục các từ viết tắt
Trang 14x
Trang 15Chương 1 MỞ ĐẦU
1.1 Lý do chọn đề tài
Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu đời và có nhiều ứng dụng trong thực tiễn Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất từ những năm đầu thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sĩ Leonhard Euler Chính ông là người đã sử dụng đồ thị để giải bài toán nổi tiếng về các cái cầu ở thành phố Konigsberg Từ đó lý thuyết đổ thị ngày càng khẳng định được vị trí quan trọng trong việc áp dụng để giải quyết các bài toán thực tế nhờ vào việc tìm ra ngày càng nhiều các định lý, công thức và thuật toán
Hiện nay có rất nhiều tài liệu, sách, giáo trình đã viết về lý thuyết đồ thị với những nội dung, đầy đủ giúp cho những người muốn nghiên cứu về lý thuyết đồ thị tham khảo Tuy nhiên hầu hết các tài liệu đều chỉ nghiên cứu về lý thuyết và xây dựng các thuật toán chung cho các bài toán mà chưa có tài liệu viết về các ứng dụng các thuật toán để giải các bài toán ứng dụng cụ thể
Bài toán cây bao trùm nhỏ nhất là bài toán có vai trò trung tâm trong lý thuyết tối ưu tổ hợp, nẩy sinh trong nhiều ứng dụng và xuất hiện như một bài toán con trong nhiều bài toán về hình học và tổ hợp Bài toán này quan trọng không chỉ vì nó
là mô hình cơ bản trong lý thuyết tối ưu về mạng mà còn vì nó được dùng như một hình mẫu điển hình trong tối ưu tổ hợp đã kích thích nhiều hướng nghiên cứu mới Với sự xuất hiện ngày càng nhiều các hệ thống như: hệ thống mạng điện, mạng sản xuất và phân phối hàng hóa, mạng giao thông, nếu độ dài của của cạnh biểu thị chi phí (đi lại, vận chuyển hàng hóa, bưu phẩm, chi phí, ) giữa hai đầu mút của cạnh đó, thì chi phí trên cây bao trùm được xác định bằng tổng chi phí của
mọi cạnh thuộc đường duy nhất trên cây nối chúng Vì vậy, tôi đã chọn đề tài “BÀI TOÁN CÂY BAO TRÙM TRÊN ĐỒ THỊ VÀ ỨNG DỤNG” để nghiên cứu
Trang 161.2 Mục đích, đối tượng và phạm vi nghiên cứu
Từ động cơ nghiên cứu nêu trên luận án tìm hiểu các định nghĩa và khái niệm
cơ bản thường dùng trong lý thuyết đồ thị Tìm hiểu các thuật toán về tìm cây bao trùm trên đồ thị: thuật toán Borůvka, thuật toán Prim và thuật toán Kruskal Nghiên cứu bài toán người du lịch dựa vào cây bao trùm nhỏ nhất Đây là vấn đề trọng tâm
và là mục tiêu nghiên cứu của luận án
1.3 Ý nghĩa khoa học và thực tiễn của đề tài
Luận văn này tập trung chủ yếu vào bài toán cây bao trùm nhỏ nhất và một số
mở rộng của nó Bài toán này khá đơn giản, có nhiều thuật toán giải hiệu quả và có nhiều ứng dụng phong phú, đồng thời gợi mở nhiều vấn đề lý thú Ngoài ra, luận văn giới thiệu khái quát những khái niệm cơ bản của lý thuyết đồ thị
1.4 Cấu trúc của luận văn
Luận văn bao gồm 5 chương:
Chương 1: Mở đầu, trình bày lý do chọn đề tài, mục tiêu, phạm vi và những
đóng góp chính của luận văn; giới thiệu cấu trúc của luận văn
Chương 2: Khái niệm cơ bản về lý thuyết đồ thị, trình bày những định
nghĩa và khái niệm cơ bản thường dùng trong lý thuyết đồ thị, đặc biệt là các khái niệm về cây bao trùm của một đồ thị và một số tính chất cơ bản của chúng
Chương 3: Bài toán cây bao trùm nhỏ nhất, Chương này đề cập tới bài toán
cây bao trùm nhỏ nhất, giới thiệu một số ứng dụng trực tiếp của nó, trình bày ba thuật toán nổi tiếng giải bài toán và cuối cùng đề cập tới một số bài toán có liên quan đến cây
Chương 4: Ứng dụng thuật toán Christofides vào bài toán người du lịch,
Trong chương này tôi xây dựng website có chức năng chọn các địa điểm cần đến, tính khoảng giữa các địa điểm, đưa ra giải pháp tìm chu trình đi qua các địa điểm
Trang 17Chương 5: Kết luận và kiến nghị, là phần tổng kết, trong đó trình bày tóm
lược kết quả luận văn và những đề nghị liên quan đến luận văn
Danh mục tài liệu tham khảo
Phụ lục
Trang 18Chương 2 KHÁI NIỆM CƠ BẢN VỀ ĐỒ THỊ
Chương này trình bày những định nghĩa và khái niệm cơ bản thường dùng trong lý thuyết đồ thị, đặc biệt là các khái niệm về cây bao trùm của một đồ thị và một số tính chất cơ bản của chúng Nội dung trình bày ở chương này chủ yếu dựa vào các tài liệu [1], [2], [3] và [5]
Lý thuyết đồ thị là ngành toán học hiện đại có ứng dụng quan trọng trong nhiều ngành khoa học, kỹ thuật hiện đại: vật lý, hóa học, sinh học, tin học, điều khiển học, …, tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sỹ Lenhard Eurler Chính ông là người sử dụng đồ thị để giải bài toán nổi tiếng về các cái cầu ở thành phố Konigsberg
(a,a) gọi là một khuyên Nếu đồ thị G có tập đỉnh là V và tập cạnh là E thì ta viết G
= (V,E) Ta cũng dùng ký hiệu V(G) để chỉ tập đỉnh và E(G) để chỉ tập cạnh của đồ thị G Ký hiệu n =| V(G)| là số đỉnh và m = |E(G)| là số cạnh của đồ thị
Trang 19Hình 2.1 Đồ thị: đỉnh và cạnh Mỗi đồ thị có thể được biểu diễn bởi một hình vẽ trên mặt phẳng Chẳng hạn Hình 2.1 biểu diễn một đồ thị có 7 đỉnh được đánh số từ 1 đến 7 và 9 cạnh (mỗi cạnh là một đoạn thẳng nối hai đỉnh) Chú ý rằng điểm cắt nhau của hai cạnh (1,4)
và (2,3) cũng như hai cạnh (4,7) và (5,6) trong hình vẽ không phải là đỉnh của đồ thị
Một cạnh của đồ thị gọi là cạnh có hướng nếu có quy định rõ một mút của cạnh là đỉnh đầu, còn mút kia là đỉnh cuối Cạnh có hướng gọi là cung, cung đi từ
đỉnh i đến đỉnh j, ký hiệu là ( ij), hoặc đơn giản là {i,j} nếu không gây nhầm lẫn
Trang 20hỗn hợp Bằng cách thay một cạnh bởi hai cung cĩ hướng ngược chiều nhau, ta cĩ
thể quy mọi đồ thị về đồ thị cĩ hướng, hình 2.2 mơ tả một đồ thị cĩ hướng
Hai cạnh e và e‟ cùng nối liền hai đỉnh như nhau gọi là cạnh kép Đồ thị khơng cĩ cạnh kép gọi là một đơn đồ thị Trái lại, gọi là đa đồ thị
Trong các phần tiếp theo chủ yếu chúng ta sẽ làm việc với đơn đồ thì vơ hướng và đơn đồ thị cĩ hướng Vì vậy, để cho ngắn gọn, ta sẽ bỏ qua tính từ đơn khi nhắc đến chúng
2.1.2 Các thuật ngữ cơ bản
Trong mục này sẽ trình bày một số thuật ngữ cơ bản của lý thuyết đồ thị Trước tiên ta xét các thuật ngữ mơ tả các đỉnh và cạnh của đồ thị vơ hướng
Định nghĩa 2.1: Hai đỉnh u và v của đồ thị vơ hướng G được gọi là kề nhau
nếu (u,v) là cạnh của đồ thị G Nếu e = (u,v) là cạnh của đồ thị ta nĩi cạnh này liên thuộc với hai đỉnh u và v, hoặc cũng nĩi là nối đỉnh u và đỉnh v, đồng thời các đỉnh
u và v sẽ được gọi là các đỉnh đầu của cạnh (u,v)
Để cĩ thể biết cĩ bao nhiêu cạnh liên thuộc một đỉnh, ta đưa vào định nghĩa sau :
Định nghĩa 2.2: Ta gọi bậc của đỉnh v trong đồ thị vơ hướng là số cạnh liên
thuộc với nĩ và sẽ ký hiệu là deg(v)
a
e f
Hình 1.Đồ thị vô hướng
g
Hình 2.3 Bậc của đồ thị vơ hướng
Trong đồ thị vẽ ở hình 2.3 ta thấy:
Trang 21deg(a)= deg (d) = 1, deg(b)=deg(c)= 4, deg(f)= deg(e)= 3, deg (g) = 0
Đỉnh bậc 0 gọi là đỉnh cô lập Đỉnh bậc 1 được gọi là đỉnh treo Trong đồ thị
trên đỉnh a, d là đỉnh treo còn đỉnh g là đỉnh cô lập
Định lý 2.1: Giả sử G = (V,E) là đồ thị vô hướng với m cạnh Khi đó tổng bậc của tất cả các đỉnh bằng hai lần số cạnh
Chứng minh: Rõ ràng mỗi cạnh e = (u,v) được tính một lần trong deg(u) và một lần trong deg(v) Từ đó suy ra tổng tất cả các bậc của các đỉnh bằng hai lần số cạnh
Hệ quả 2.1: Trong đồ thị vô hướng, số đỉnh bậc lẻ ( nghĩa là có bậc là số lẻ) là một số chẵn
Chứng minh: Thực vậy, gọi O và U tương ứng là tập đỉnh bậc lẻ và tập đỉnh
bậc chẵn của đồ thị Ta có theo định lý 2.1: deg (O) +deg (U) = 2m, trong đó m là
số cạnh của đồ thị, do U là tập đỉnh bậc chẵn nên deg( U) sẽ là một số chẵn vì nó là tổng các số chẵn
Do đó deg (O) cũng sẽ là một số chẵn vì deg (U) và 2m là số chẵn
Mà O là tập đỉnh bậc lẻ và deg (O) là số chẵn nên deg (O) sẽ là tổng của một
số chẵn các số hạng Vì vậy, số đỉnh bậc lẻ phải là số chẵn
Định nghĩa 2.3: Nếu e = (u,v) là cung của đồ thị có hướng G thì ta có hai
đỉnh u và v kề nhau, và nói cung (u, v) nối đỉnh u với đỉnh v hoặc cũng nói cung này
là đi ra khỏi đỉnh u và vào đỉnh v Đỉnh u(v) sẽ được gọi là đỉnh đầu (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 2.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ị ra khỏi nó (đi vào nó) và ký hiệu là deg +
(v) (deg - (v))
Trang 22a b c
de
Hình 2.Đồ thị có hướng
Hình 2.4 Bán bậc ra (bán bậc vảo) đồ thị cĩ hướng Xét đồ thị cho trong hình 2.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
Tương tự như khái niệm bậc của đồ thị vơ hướng ta cĩ định lý sau :
Định lý 2.2: Giả sử G = (V,E) là đồ thị cĩ hướng với m cạnh Khi đĩ tổng của
tất cả các bán bậc vào và bán bậc ra bằng hai lần số cạnh
2.1.3 Đường đi, chu trình và đồ thị liên thơng
Đường P từ đỉnh u tới đỉnh v là một dãy liên tiếp các cạnh cĩ dạng :
(a0, a1), (a1, a2), (a2, a3), …(ak-1, ak), với a0 = u, ak = v và k≥ 0, trong đĩ các đỉnh a0, a1, …ak đều khác nhau Để đơn giản, đơi khi ta viết P={ a0, a1, …ak} và nĩi
đĩ là đường nối đỉnh u và đỉnh v Đỉnh u gọi là đỉnh đầu, đỉnh v gọi là đỉnh cuối của
P Với x,y ∈ V(P) (tập các đỉnh thuộc đường P), ta ký hiệu P[x,y] là đồ thị con của
P mà nĩ là đường trong P đi từ x tới y Một đường nối một đỉnh tới chính nĩ (đỉnh
đầu trùng với đỉnh cuối) gọi là một chu trình Độ dài của đường (chu trình) là số cạnh của đường (chu trình ) đĩ Đường đi hay chu trình được gọi là đơn nếu như
khơng cĩ cạnh nào bị lặp lại
Trên đồ thị vơ hướng cho trong hình 2.5: 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,
Trang 23f, e, b là chu trình độ dài 4 Đường đi a, b, e, d, a, b cĩ độ dài 5 khơng phải là đường
đi đơn, do cạnh (a, b) cĩ mặt trong nĩ 2 lần
e d
c
fHình 1.Đường đi trên đồ thị
e d
c
fHình 2.5 Đường đi trên đồ thị
Khái niệm đường đi và chu trình trên đồ thị cĩ hướng được định nghĩa hồn
tồn tương tự như trong trường hợp đồ thị vơ hướng, chỉ khác là ta cĩ chú ý đến các
hướng của các cung
Trong thực tế, xét một mạng máy tính Một câu hỏi đặt ra là hai máy bất kỳ
trong mạng này cĩ thể trao đổi thơng tin với nhau hoặc là trực tiếp qua kênh nối
chúng hoặc thơng qua một vài máy tính trung gian trong mạng? Nếu sử dụng đồ thị
để biểu diễn mạng máy tính này (trong đĩ các đỉnh của đồ thị tương ứng với các
máy tính, cịn các cạnh tương ứng với các kênh nối) câu hỏi đĩ được phát biểu trong
ngơn ngữ đồ thị như sau: Tồn tại hay khơng đường đi giữa mọi cặp đỉnh của đồ thị
Ta đi đến định nghĩa sau :
Định nghĩa 2.5: Đồ 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ư vậy hai máy tính bất kỳ trong mạng cĩ thể trao đổi thơng tin được với
nhau khi và chỉ khi đồ thị tương ứng với mạng này là đồ thị liên thơng
Trong hình 2.6 : Đồ thị G là liên thơng, cịn đồ thị H là khơng liên thơng
Trang 24Hình 2.6 Đồ thị liên thông G và không liên thông H
Định nghĩa 2.6: Ta gọi đồ thị con của đồ thị G = (V, E) là đồ thị H = (W, F),
trong đó W⊆ V, F ⊆ E
Trong trường hợp đồ thị là không liên thông, nó sẽ rã ra thành một số đồ thị con liên thông đôi một không có đỉnh chung Những đồ thị con liên thông như vậy
ta sẽ gọi là các thành phần liên thông của đồ thị
Đồ thị H trong hình 2.6 gồm 3 thành phần liên thông H1, H2, H3
Trong mạng máy tính có thể có những máy (những kênh nối) mà sự hỏng hóc của nó sẽ ảnh hưởng đến việc trao đổi thông tin trong mạng Các khái niệm tương ứng với tình huống này sẽ được đưa ra trong định nghĩa sau:
Định nghĩa 2.7: Đỉnh v được gọi là đỉnh rẽ nhánh (đỉnh cắt, đỉnh khớp) nếu
việc loại bỏ v cùng với các cạnh liên thuộc với nó khỏi đồ thị làm tăng số thành
phần liên thông của đồ thị Cạnh e được gọi là cạnh cắt (cầu ) nếu việc loại bỏ nó
khỏi đồ thị làm tăng số thành phần liên thông của đồ thị
Trong đồ thị G ở hình 2.6, đỉnh d và e là đỉnh rẽ nhánh, còn các cạnh (d, f) và
(e, g) là cầu
Đố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
Định nghĩa 2.8: Đồ thị có hướng G= (V, A) được gọi là liên thông mạnh nếu
luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó
Trang 25Định nghĩa 2.9: Đồ thị cĩ hướng G = (V, A) được gọi là liên thơng yếu nếu
đồ thị vơ hướng tương ứng với nĩ là vơ hướng 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 đồ thị dưới đây
Trong hình 2.7, đồ thị G là liên thơng mạnh, cịn H là liên thơng yếu
Hình 3 Đồ thị liên thông mạnh G và đồ thị liên thông yếu H
Hình 2.7 Đồ thị liên thơng mạnh G, đồ thị liên thơng yếu H
Một câu hỏi đặt ra là khi nào cĩ thể định hướng các cạnh của một đồ thị vơ hướng liên thơng để cĩ thể thu được đồ thị cĩ hướng liên thơng mạnh? Ta sẽ gọi đồ
thị như vậy là đồ thị định hướng được
Định lý 2.3: Đồ 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
Chứng minh:
Điều kiện cần: Giả sử (u, v) là một cạnh của đồ thị Từ sự tồn tại đường đi cĩ
hướng từ u đến v và ngược lại suy ra (u, v) phải nằm ít nhất trên một chu trình
Điều kiện đủ: Thủ tục sau đây cho phép định hướng các cạnh của đồ thị để
thu được đồ thị cĩ hướng liên thơng mạnh Giả sử C là một chu trình nào đĩ trong
đồ thị Định hướng các cạnh trên chu trình này theo một hướng đi vịng theo nĩ Nếu tất cả các cạnh của đồ thị là đã được định hướng thì kết thúc thủ tục Ngược lại, chọn e là một cạnh chưa định hướng cĩ chung đỉnh với ít nhất một trong số các cạnh đã định hướng Theo giả thiết tìm được chu trình C‟ chứa cạnh e Định hướng
Trang 26các cạnh chưa được định hướng của C‟ theo một hướng dọc theo chu trình này (không định hướng lại các cạnh đã có định hướng) Thủ tục trên sẽ được lặp lại cho đến khi tất cả các cạnh của đồ thị được định hướng Khi đó ta thu được đồ thị có hướng liên thông mạnh
2.1.4 Một số dạng đồ thị đặc biệt
a/ Đồ thị đầy đủ
Đồ thị đầy đủ là đơn đồ thị vô hướng mà giữa hai đỉnh bất kỳ của nó luôn có
một cạnh nối Đồ thị đầy đủ n đỉnh ký hiệu là Kn và có tất cả n(n-1) / 2 cạnh Các đồ
Trang 27
Hình 2.9 Đồ thị hai phần
Đồ thị hai phần gặp rất nhiều mô hình trong thực tế Chẳng hạn quan hệ hôn nhân giữa tập những người nam và những người nữ, việc sinh viên chọn trường, thầy giáo chọn tiết học vv…
c/ Đồ thị vòng
Đồ thị vòng Cn, n ≥ 3, gồm n đỉnh v1, v2, …, vn và các cạnh (v1, v2), (v2, v3),… (vn-1, vn), (vn, v1)
Trang 282.2.1 Biểu diễn đồ thị
a/ Ma trận kề
Nếu các đỉnh của đồ thị đƣợc đánh số liên tiếp từ 1 đến n thì đồ thị có thể
đƣợc biểu diễn bởi một ma trận vuông cấp n, gọi là ma trận kề Cho đồ thị G = (V,
E), ma trận kề của đồ thị G đƣợc định nghĩa là ma trận M= [mij ] với
1 nếu đỉnh i kề với đỉnh j,
mi j =
0 nếu trái lại
Trang 29Cũng có thể dùng ma trận kề để biểu diễn đồ thị có hướng: mij =1 nếu có cung
đi từ i tới j Ma trận kề của đồ thị vô hướng là đối xứng, nhưng ma trận kề của đồ
thị có hướng nói chung không đối xứng
dùng cách biểu diễn đồ thị dưới dạng danh sách cạnh (cung)
Trong cách biểu diễn này mỗi cạnh (cung) e = (x, y) của đồ thị sẽ được lưu
giữ nhờ hai biến nguyên Dau (e), Cuoi (e) Nhược điểm của cách biểu diễn này là
khó xác định các đỉnh của đồ thị kề với một đỉnh cho trước
Trang 30Danh sách cạnh (cung) của đồ thị vẽ ở hình 2.13 như sau :
c/ Danh sách kề
Trong nhiều ứng dụng của lý thuyết đồ thị, cách biểu diễn đồ thị dưới dạng danh sách kề là cách biểu diễn thích hợp và hay được dùng nhất Theo cách biểu diễn này, ứng với mỗi đỉnh u của đồ thị ta sẽ lưu giữ danh sách các đỉnh kề u : Ke(u) = { v∈ V(G) : ( u,v) ∈ E(G)}
Danh sách kề của đồ thị ở hình 2.13 là (0 chỉ hết danh sách)
Trang 312.2.2 Các thuật toán tìm kiếm trên đồ thị
Nhiều thuật toán trên đồ thị được xây dựng trên cơ sở duyệt (thăm, xét…) tất
cả các đỉnh của đồ thị theo thứ tự sao cho mỗi đỉnh được thăm đúng một lần (không trùng lặp và không bỏ sót) Những thuật toán như vậy sẽ được gọi là các thuật toán tìm kiếm (Search Algorithms) trên đồ thị Trong mục này chúng ta sẽ giới thiệu hai thuật toán tìm kiếm cơ bản trên đồ thị: Đó là thuật toán tìm kiếm theo chiều sâu (Depth First Search) và thuật toán tìm kiếm theo chiều rộng (Breadth First Search)
a/ Tìm kiếm theo chiều sâu (DFS = Depth First Search)
Ý tưởng chính của thuật toán có thể trình bày như sau Ta sẽ bắt đầu tìm kiếm
từ một đỉnh v0 nào đó của đồ thị Sau đó chọn u là một đỉnh tuỳ ý kề với v0 và lặp lại quá trình đối với u Ở bước tổng quát, giả sử ta đang xét đỉnh v Nếu như trong
số các đỉnh kề với v tìm được đỉnh w là chưa được xét thì ta sẽ xét đỉnh này (nó sẽ trở thành đã xét) và bắt đầu từ nó ta sẽ bắt đầu quá trình tìm kiếm còn nếu như không còn đỉnh nào kề với v là chưa xét thì ta nói rằng đỉnh này đã duyệt xong và quay trở lại tiếp tục tìm kiếm từ đỉnh mà trước đó ta đến được đỉnh v (nếu v=v0, thì kết thúc tìm kiếm) Có thể nói tìm kiếm theo chiều sâu bắt đầu từ đỉnh v được thực hiện trên cơ sở tìm kiếm theo chiều sâu từ tất cả các đỉnh chưa xét kề với v
Xét đồ thị cho trong hình 2.14 gồm 13 đỉnh, các đỉnh được đánh số từ 1 đến
13 như sau:
Trang 32Thuật toán tìm kiếm theo chiều sâu trên đồ thị vô hướng trình bày ở trên dễ dàng có thể mô tả lại cho đồ thị có hướng Trong trường hợp đồ thị có hướng, thủ tục DFS(v) sẽ cho phép thăm tất cả các đỉnh u nào mà từ v có đường đi đến u
b/ Tìm kiếm theo chiều rộng ( BFS = Breadth first Search )
Để ý rằng trong thuật toán tìm kiếm theo chiều sâu đỉnh được thăm càng muộn
sẽ càng sớm trở thành đã duyệt xong Điều đó là hệ quả tất yếu của việc các đỉnh được thăm sẽ được kết nạp vào trong ngăn xếp (STACK) Tìm kiếm theo chiều rộng trên đồ thị, nếu nói một cách ngắn gọn, được xây dựng trên cơ sở thay thế ngăn xếp (STACK) bởi hàng đợi (QUEUE) Với sự cải biên như vậy, đỉnh được thăm càng sớm sẽ càng sớm trở thành đã duyệt xong (tức là càng sớm dời khỏi hàng
Trang 33đợi) Một đỉnh sẽ trở thành đã duyệt xong ngay sau khi ta xét xong tất cả các đỉnh
kề (chƣa đƣợc thăm) với nó
Xét đồ thị xét trong hình 2.15, thứ tự thăm đỉnh của đồ thị theo thuật toán tìm
kiếm theo chiều rộng đƣợc ghi trong ngoặc
Rõ ràng mọi đồ thị Euler luôn là nửa Euler, nhƣng điều ngƣợc lại không luôn đúng
Trang 34Đồ thị G1 Đồ thị G2
Hình 2.16 Đồ thị Euler
Trong hình 2.16 đồ thị G1 là đồ thị Euler vì nó có chu trình Euler a, e, c, d, e,
b, a Đồ thị G2 không có chu trình Euler nhưng có đường đi Euler a, c, d, e, b, d, a,
b vì thế G2 là đồ thị nửa Euler
Điều kiện cần và đủ để một đồ thị là một đồ thị Euler được Euler tìm ra vào năm 1736 khi ông giải quyết bài toán bài toán hóc búa nổi tiếng thế giới thời đó về bảy cái cầu ở thành phố Konigdberg và đây là định lý đầu tiên của lý thuyết đồ thị
Định lý 2.4 (Euler) Đồ thị vô hướng liên thông G là đồ thị Euler khi và chỉ khi mọi đỉnh của G đều là có bậc chẵn
Để chứng minh định lý trước hết ta chứng minh bổ đề
Bổ đề 2.1: Nếu bậc của mỗi đỉnh của đồ thị G không nhỏ hơn 2 thì G chứa
chu trình
Chứng minh: Nếu G có cạnh lặp thì khẳng định của bổ đề là hiển nhiên Vì
vậy giả sử G là đơn đồ thị Gọi v là một đỉnh nào đó của G Ta sẽ xây dựng theo qui nạp đường đi
Trang 35Trong đó v1 là đỉnh kề với v, do tập đỉnh của G là hữu hạn nên sau một số hữu hạn bước ta phải quay lại đỉnh đã xuất hiện trước đó Gọi đỉnh đầu tiên như thế là
vk Khi đó đoạn của đường đi xây dựng nằm giữa hai đỉnh vk là chu trình cần tìm
Chứng minh định lý:
Điều kiện cần: Giả sử G là đồ thị Euler tức là tồn tại chu trình Euler P trong
G Khi đó cứ mỗi lần chu trình P đi qua một đỉnh nào đó của G bậc của đỉnh đó tăng lên 2 Mặt khác mỗi cạnh của đồ thị xuất hiện trong P đúng một lần, suy ra mỗi đỉnh của đồ thị đều là bậc chẵn
Điều kiện đủ: Quy nạp theo số đỉnh và số cạnh của G Do G liên thông và m(v) là số chẵn nên bậc của nó không nhỏ hơn 2 Từ đó theo bổ đề 2.1 G phải chứa
chu trình C Nếu C đi qua tất cả các cạnh của G thì nó chính là chu trình Euler Giả
sử C không đi qua tất cả các cạnh của G, khi đó loại bỏ G tất cả các cạnh thuộc C ta thu được một đồ thị mới H vẫn là bậc chẵn Theo giả thiết qui nạp, trong mỗi thành phần liên thông của H đều tìm được chu trình Euler Do G là liên thông nên trong mỗi thành phần của H có ít nhất một đỉnh chung với chu trình C Vì vậy, ta có thể xây dựng chu trình Euler trong G như sau: bắt đầu từ một đỉnh nào đó của chu trình
C, đi theo các cạnh của C chừng nào chưa gặp phải đỉnh không cô lập của H Nếu gặp phải đỉnh như vậy ta sẽ đi theo chu trình Euler của thành phần liên thông của H chứa đỉnh đó Sau đó lại tiếp tục đi theo cạnh của C cho đến khi gặp phải đỉnh không cô lập của H thì lại theo chu trình Euler của thành phần liên thông tương ứng trong H Quá trình kết thúc khi ta trở về đỉnh xuất phát, tức là thu được chu trình đi qua mỗi cạnh của đồ thị đúng một lần
Hệ quả 2.1: Đồ thị vô hướng liên thông G là nửa Euler khi và chỉ khi nó không quá 2 đỉnh bậc lẻ
Chứng minh: Thực vây, nếu G có không quá 2 đỉnh bậc lẻ thì số đỉnh bậc lẻ
của nó có thể là 0 hoặc 2 Nếu G không có đỉnh bậc lẻ thì theo định lý Euler nó là
đồ thị Euler Giả sử G có 2 đỉnh bậc lẻ là u và v Gọi H là đồ thị thu được từ G bằng cách thêm vào G một đỉnh mới w và hai cạnh (w, v) và (w, u) Khi đó tất cả các
Trang 36đỉnh của H đều là bậc chẵn, vì thế theo định lý Euler Ta có chu trình Euler C Xóa
bỏ khỏi chu trình này đỉnh w và hai cạnh kề với nó ta thu được đường đi Euler trong
đồ thị G
2.3.2 Đồ thị Hamilton
Định nghĩa 2.11: Đường đi qua tất cả các đỉnh của đồ thị mỗi đỉnh đúng một
lần được gọi là đường đi Hamilton Chu trình bắt đầu từ một đỉnh v nào đó qua tất
cả các đỉnh còn lại mỗi đỉnh đúng một lần rồi quay trở về v được gọi là chu trình
Hamilton Đồ thị G được gọi là Hamilton nếu nó chứa chu trình Hamilton và gọi là
đồ thị nửa Hamilton nếu nó có đường đi Hamilton
Hình 2.17 Đồ thị Hamilton
Trong hình 2.17: G1 là nửa Hamilton còn G2 là Hamilton
Định lý 2.5: (Dirak 1952) Đơn đồ thị vô hướng G với n≥2 đỉnh, mỗi đỉnh có
bậc không nhỏ hơn n/2 là đồ thị Hamilton
Chứng minh: Thêm vào đồ thị G k đỉnh mới và nối chúng với tất cả các đỉnh
của G Giả sử k là số nhỏ nhất cần thêm vào để cho đồ thị thu được G‟ là đồ thị Hamilton Ta sẽ chỉ ra rằng k=0
Thực vậy, giả sử ngược lại là k>0 Ký hiệu v, p, w, …, v là chu trình Hamilton trong G‟, trong đó v,w là đỉnh của G còn P là một trong số các đỉnh mới
Trang 37Khi đó w không kề với v vì nếu ngược lại ta không cần sử dụng p và điều đó là mâu thuẫn với giả thiết k nhỏ nhất Hơn nữa đỉnh (w‟ chẳng hạn) kề với w không thể đi liền sau đỉnh v‟ (kề với v) vì rằng khi đó có thể thay
v p w … v’ w‟… v
bởi v v‟… w w‟ … v
Bằng cách đảo ngược đoạn chu trình nằm trong w và v‟ Từ đó suy ra là số đỉnh của đồ thị G‟ không kề với w là không nhỏ hơn số đỉnh kề với v (tức là ít nhất cũng là bằng n/2+k), đồng thời số đỉnh của G‟ kề với w ít ra là phải bằng n/2+k Do không có đỉnh nào của G‟ vừa không kề, lại vừa kề với w, cho nên tổng số đỉnh của
đồ thị G‟ (G‟ có n+k đỉnh) không ít hơn n+2k Mâu thuẫn do đó đã chứng minh được định lý
2.4 Cây và cây bao trùm của đồ thị
Đồ thị vô hướng liên thông không có chu trình gọi là cây Khái niệm cây lần đầu tiên được Cayley đưa ra vào 1857, khi ông sử dụng chúng để đếm một dạng cấu trúc phân tử của các hợp chất hóa học trong hóa học hữu cơ Cây còn được sử dụng rộng rãi trong rất nhiều lĩnh vực khác nhau, đặc biệt trong tin học, cây được sử 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 cất giữ, truyền dữ liệu và tìm kiếm
Định nghĩa 2.12: Ta gọi cây là một đồ thị vô hướng liên thông và không có
chu trình Đồ thị vô hướng gồm k thành phần liên thông mà mỗi thành phần liên
thông là một cây được gọi là rừng
Trang 38T1 T2 Hình 2.18 Cây của đồ thị
Trong hình 2.18 là một rừng gồm 2 cây T1, T2
Có thể nói cây là đồ thị vô hướng đơn giản nhất Định lý sau đây cho ta một số tính chất của cây
Định lý 2.6: Giả sử G = (V, E) là đồ thì vô hướng n đỉnh Khi đó các mệnh đề
sau đây là tương đương:
1) T là cây
2) T không chứa chu trình và có n-1 cạnh
3) T liên thông và có n-1 cạnh
4) T liên thông và mỗi cạnh của nó đều là cầu
5) Hai đỉnh bất kỳ của T được nối với nhau bởi đúng một đường đi đơn 6) T không chứa chu trình nhưng hễ cứ thêm vào một cạnh ta thu được một chu trình
Chứng minh: ta sẽ chứng minh định lý theo sơ đồ sau:
(1)=>(2)=>(3)=>(4)=>(5)=>(6)=>(1)
(1)=>(2) theo định nghĩa T không chứa chu trình Ta sẽ chứng minh bằng qui
nạp theo số đỉnh n cho khẳng định: Số cạnh của cây với n đỉnh là n -1 Rõ ràng khẳng định đúng với n = 1 Giả sử n > 1 Trước hết nhận rằng trong mọi cây T có n
Trang 39đỉnh đều tìm được ít nhất một đỉnh là đỉnh treo (tức là đỉnh có bậc là 1) Thực vậy, gọi v1,v2,…,vk là đường đi dài nhất (theo số cạnh) trong T Khi đó rõ ràng v1 và vk là các đỉnh treo, vì từ v1(vk) không có cạnh nối với bất cứ đỉnh nào trong số các đỉnh
v2,v3,…,vk (do đồ thị không chứachu trình), cũng như với bất cứ đỉnh nào khác của
đồ thị (do đường đi đang xét dài nhất) Loại bỏ v1 và cạnh (v1,v2) khỏi T ta thu được cây T1 với n-1 đỉnh, mà theo giả thiết qui nạp có n-2 cạnh Vậy cây T có n-2+1=n-1 cạnh
(2) => (3) ta chứng minh bằng phản chứng Giả sử T không liên thông Khi đó
T phân rã thành k ≥ 2 phần liên thông T1,T2,…,Tk Do T không chứa chu trình nên mỗi Ti (i=1,2, ,k) cũng không chứa chu trình, vì thế mỗi Ti là cây Do đó nếu gọi n(Ti) và e(Ti) theo thứ tự là số đỉnh và cạnh của Ti, ta có:
Mâu thuẫn thu được chứng tỏ là T liên thông
(3)=>(4) Việc loại bỏ một cạnh bất kỳ khỏi T dẫn đến đồ thị với n đỉnh và n-2
cạnh rõ ràng là đồ thì không liên thông.vậy mọi cãnh trong T đều là cầu
(4)=>(5) Do T là liên thông nên hai đỉnh bất kỳ của nó được nối với nhau bởi
một đường đi đơn Nếu có cặp đỉnh nào của T có hai đường đi đơn khác nhau nối chúng, thì từ đó suy ra đồ thị chứa chu trình, và vì thế các cạnh trên chu trình này không phải là cầu
(5)=>(6) T không chứa chu trình, bởi vì thế nếu có chu trình thì hóa ra tìm
được cặp đỉnh của T được nối với nhau bởi hai đường đi đơn Bây giờ, nếu thêm vào T một cạnh e nối hai đỉnh u và v nào đó của T Khi đó cạnh này cùng với đường
Trang 40đi đơn nối u và v sẽ tạo thành chu trình trong T Chu trình thu được này là duy nhất,
vì thế thu được nhiều hơn một chu trình thì suy ra trong T trước đó phải có sãn chu trình
(6)=>(1) Giả sử T không liên thông Khi đó gồm ít ra là thành phần liên thông
Vì vậy, nếu thêm vào T cạnh nối hai đỉnh thuộc hai thành phần liên thông khác nhau ta không thu được thêm một chu trình nào cả Điều đó mâu thuẫn với giả thiết (6) định lý được chứng minh
Tóm lại Chương này đã đề cập tới những khái niệm về đồ thị có liên quan
đến bài toán cây bao trùm nhỏ nhất được xét ở các chương sau Cụ thể, đã trình bày
và giải thích các khái niệm về đồ thị (vô hướng, có hướng), đỉnh và cạnh (cung), đường và chu trình trong đồ thị, chu trình Euler, chu trình Hamilton