1.1.8 Tính liên thông Một đồ thị vô hướng G = V, E được gọi là liên thông nếu có đường đigiữa mọi cặp đỉnh phân biệt của đồ thị.. Một đồ thị có hướng gọi là liên thông mạnh nếu có đường
Trang 1ĐỂ TÌM ĐƯỜNG ĐI, CHU TRÌNH EULER VÀ HAMILTON
MSHV: CH1101098 LỚP: CH-K6
Trang 2LỜI MỞ ĐẦU
Lý thuyết đồ thị là một ngành khoa học được phát triển từ lâu, nhưng có nhiềuứng dụng hiện đại nhất là ứng dụng trong tin học ngày nay Những ý tưởng cơbản của nó được đưa ra từ thế kỷ XVIII bởi nhà toán học Thụy Sĩ tên làLeonhard Euler Ông đã dùng đồ thị để giải quyết bài toán nổi tiếng về cáccầu ở Konigsberg hay còn gọi là bài toán 7 chiếc cầu
Đặc biệt trong khoảng vài mươi năm trở lại đây, cùng với sự ra đời của máytí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 nhiều hơn Đặ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 như: Mạng máy tính, Lý thuyết mã, Tối
ưu hoá, Kinh tế học v.v
Phạm vi của bài thu hoạch sẽ khảo sát và cài đặt ứng dụng minh họa, giảiquyết bài toán tìm đường đi, chu trình Euler và Hamilton dựa trên sự hỗ trợcủa phần mền toán học Maple 16
Maple 16 là phần mềm toàn diện để giải quyết các bài toán cao cấp Bao gồmnhững công cụ xử lý, tính toán trong các lĩnh vực toán học như :
Đại số tuyến tính: ma trận, định thức, hệ phương trình tuyến tính,không gian véctơ,
Giải tích: hàm số, giới hạn, liên tục, đạo hàm, tích phân, phương trình
vi phân, chuỗi …
Trang 3 Lý thuyết đồ thị: đỉnh, cung, liên thông, đường đi, chu trình,
Đồ họa, Toán rời rạc, Thống Kê, … và nhiều lĩnh vực khác của toánhọc
Với trên 3000 hàm số Maple là một trợ lý toán học tuyệt vời giúp giải quyếtphần tính toán trong học tập và nghiên cứu
Nội dung của bài thu hoạch bao gồm 4 chương, chủ yếu lựa chọn và sắp xếpnhững nội dung then chốt nhất trong khoảng thời gian cho phép Bài thuhoạch trình bày và giới thiệu một cách tương đối hệ thống những kiến thức cơbản về đồ thị Euler và đồ thị Hamilton
Nội dung chương 1 trình bày tổng quan các khái niệm cơ bản về lýthuyết đồ thị, đồng thời giới thiệu cách để biểu diễn đồ thị trên máytính
Chương 2 trình bày tổng quan các khái niệm cơ bản về đồ thị Eulernhư: đường đi Euler, chu trình Euler và các giải thuật
Chương 3 trình bày tổng quan các khái niệm cơ bản về đồ thị Hamiltonnhư: đường đi Hamilton, chu trình Hamilton
Chương 4 sẽ cài đặt ứng dụng minh họa cho bài toán tìm đường đi, chu trình Euler và Hamilton dựa trên sự hỗ trợ của phần mền toán học Maple 16.
Trang 4LỜI CẢM ƠN
Với lòng biết ơn sâu sắc nhất, em xin gửi đến quý Thầy Cô ở khoa, Khoa HọcMáy Tính - Trường Đại Học Công Nghệ Thông Tin đã đem hết tâm huyếttruyền đạt vốn kiến thức quý báu cho chúng em
Em xin chân thành cảm ơn PGS.TS Đỗ Văn Nhơn đã truyền đạt kiến thứcmôn Lập trình Symbolic & trí tuệ nhân tạo Qua đó giúp em có đầy đủ kiếnthức để hoàn thành bài thu hoạch này
Nhân đây em cũng xin gửi lời cảm ơn chân thành đến gia đình, bạn bè, đồngnghiệp đã động viên tin thần cho em trong suốt quá trình học tập của mình.Sau cùng, em xin kính chúc quý Thầy Cô, Khoa Học Máy Tính cùng PGS.TS
Đỗ Văn Nhơn dồi dào sức khỏe để thực hiện sứ mệnh cao đẹp của mình làtruyền đạt kiến thức cho thế hệ mai sau
Một lần nữa em xin chân thành cảm ơn !
Trang 5TP HCM, ngày 02 tháng 02 năm 2013 Sinh viên thực hiện
(ký và ghi rõ họ tên)
Nguyễn Ngọc Lâm NHẬN XÉT CỦA GIẢNG VIÊN PHỤ TRÁCH
Trang 6
TP HCM, ngày tháng năm 2013 Giảng viên phụ trách (ký và ghi rõ họ tên) PGS TS Đỗ Văn Nhơn MỤC LỤC LỜI MỞ ĐẦU
Trang 7LỜI CẢM ƠN
NHẬN XÉT CỦA GIẢNG VIÊN PHỤ TRÁCH
Chương 1 TỔNG QUAN VỀ LÝ THUYẾT ĐỒ THỊ 1
1.1 Các khái niệm cơ bản về đồ thị 1
1.1.1 Định nghĩa đồ thị (Graph) 1
1.1.2 Đơn đồ thị 1
1.1.3 Đa đồ thị 1
1.1.4 Đồ thị vô hướng 1
1.1.5 Đồ thị có hướng 1
1.1.6 Bậc của đỉnh 2
1.1.7 Đường đi và chu trình 2
1.1.8 Tính liên thông 2
1.1.10 Điểm khớp 3
1.1.11 Cầu của đồ thị 3
1.2 Biểu diễn đồ thị trên máy tính 3
1.2.1 Ma trận kề 3
1.2.2 Danh sách kề 4
1.2.3 Danh sách cạnh 5
Chương 2 ĐƯỜNG ĐI EULER VÀ ĐỒ THỊ EULER 6
2.1 Tình huống dẫn nhập: “Bài toán 7 cây cầu” 6
2.2 Đường đi Euler và đồ thị Euler 6
2.2.1 Định nghĩa 6
Trang 82.2.2 Các định lý 7
2.2.3 Thuật toán Fleury tìm chu trình Euler 8
Chương 3 ĐƯỜNG ĐI HAMILTON VÀ ĐỒ THỊ HAMILTON 9
3.1 Tình huống dẫn nhập: “Đi vòng quanh thế giới” 9
3.2 Đường đi Hamilton và đồ thị Hamilton 10
3.2.1 Định nghĩa 10
3.2.2 Các định lý 10
3.2.3 Thuật toán tìm chu trình Hamilton 11
Chương 4 CÀI ĐẶT ỨNG DỤNG MINH HỌA 12
4.1 Đường đi và chu trình Euler 12
4.1.1 Phát biểu bài toán về các cầu ở Konigsberg 12
4.1.2 Cấu trúc dữ liệu cho giải thuật Fleury 12
4.1.3 Giải thuật Fleury tìm chu trình Euler 13
4.1.4 Tìm hiểu chức năng một số hàm thuộc thư viện GraphTheory 14
4.1.5 Thủ tục cho giải thuật Fleury 15
4.1.6 Dữ liệu thử nghiệm 16
4.2 Đường đi và chu trình Hamilton 19
4.1.1 Phát biểu bài toán “Đi vòng quanh thế giới” 19
4.1.2 Cấu trúc dữ liệu giải thuật tìm đường đi, chu trình Hamilton 19
4.1.3 Giải thuật tìm đường đi, chu trình Hamilton 19
4.1.5 Thủ tục cho giải thuật tìm đường đi và chu trình Hamilton 21
4.1.6 Dữ liệu thử nghiệm 22
Trang 9KẾT LUẬN TÀI LIỆU THAM KHẢO
DANH MỤC CÁC BẢNG
Trang 10Chương 1 TỔNG QUAN VỀ LÝ THUYẾT ĐỒ THỊ
1.1 Các khái niệm cơ bản về đồ thị
1.1.1 Định nghĩa đồ thị (Graph)
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ả hình thức:
G = (V, E)Trong đó:
Trang 11u, v bất kỳ tương đương với hai cung (u, v) và (v, u).
Hình 1.1 Phân loại đồ thị
1.1.6 Bậc của đỉnh
Bậc của đỉnh v trong đồ thị G = (V, E), ký hiệu deg(v), là số các cạnh liênthuộc với nó, riêng khuyên tại một đỉnh được tính hai lần cho bậc của nó.Đỉnh v gọi là đỉnh treo nếu deg(v) = 1 và gọi là đỉnh cô lập nếu deg(v) = 0
Trang 121.1.7 Đường đi và chu trình
Đường đi độ dài n từ đỉnh u tới đỉnh v, với n là một số nguyên không âmtrong một đồ thị vô hướng là một dãy các cạnh {x0, x1},{x1, x2},…,{xn-1,
xn}, với u = x0 và xn = v Đường đi được gọi là một chu trình nếu nó bắt đầu
và kết thúc tại cùng một đỉnh
1.1.8 Tính liên thông
Một đồ thị vô hướng G = (V, E) được gọi là liên thông nếu có đường đigiữa mọi cặp đỉnh phân biệt của đồ thị
Một đồ thị có hướng gọi là liên thông mạnh nếu có đường đi từ a tới b và từ
b tới a với mọi đỉnh a và b của đồ thị
Một đồ thị có hướng gọi là liên thông yếu nếu luôn tồn tại đường đi giữahai đỉnh khi ta không quan tâm tới hướng của các cạnh
1.1.9 Thành phần liên thông
Thành phần liên thông: một đồ thị G = (V, E) không liên thông là hợp củahai hay nhiều đồ thị con liên thông Mỗi cặp các đồ thị con này không cóđỉnh chung Các đồ thị con liên thông rời nhau như vậy được gọi là cácthành phần liên thông của đồ thị G = (V, E)
1.1.10 Điểm khớp
Một đỉnh v được gọi là điểm khớp của đồ thị G = (V, E) nếu loại bỏ v cùngcác cạnh liên thuộc với nó khỏi đồ thị sẽ làm tăng số thành phần liên thôngcủa đồ thị
Trang 131.1.11 Cầu của đồ thị
Một cạnh của đồ thị G = (V, E) gọi là cầu, nếu loại bỏ cạnh đó khỏi đồ thị
sẽ làm tăng số thành phần liên thông của đồ thị
1.2 Biểu diễn đồ thị trên máy tính
1.2.1 Ma trận kề
Giả sử G = (V, E) là một đơn đồ thị với n đỉnh 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 đó:
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
Ví dụ: Cho đồ thị vô hướng G = (V, E) như hình dưới đây
Hình 1.2 Ma trận kề
Ưu điểm:
Đơ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, tachỉ việc kiểm tra bằng một phép so sánh: a[u, v] ≠ 0
Nhược điểm:
V1
V
5
V4
V2
V3
Trang 14 Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận liền kề luôn luônđòi hỏi n2 ô nhớ để lưu các phần tử ma trận, điều đó gây lãng phí bộnhớ dẫn tới việc không thể biểu diễn được đồ thị với số đỉnh lớn.
1.2.2 Danh sách kề
Biểu diễn đồ thị bởi danh sách kề là cách liệt kê tất cả các cạnh của đồ thị{(v1, v2); (v1, v3); (v1, v5); (v2, v4); (v3, v4}); (v3, v5}); (v4, v5)} Hoặc là danhsách này chỉ rõ các đỉnh nối với mỗi đỉnh của đồ thị
ra là nối một đỉnh với một đỉnh khác kề nó
Nhược điểm:
Về lý thuyết, so với hai phương pháp biểu diễn trên, danh sách kề tốthơn hẳn Chỉ có điều, trong trường hợp cụ thể mà ma trận kề haydanh sách cạnh không thể hiện nhược điểm thì ta nên dùng ma trận
Trang 15kề (hay danh sách cạnh) bởi cài đặt danh sách kề có phần dài dònghơn.
1.2.3 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ướidạ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áccạ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(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à đỉnhcuối của cung) Danh sách được lưu trong bộ nhớ dưới dạng mảng hoặcdanh sách móc nối
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ữngcạnh có chứa đỉnh v và xét đỉnh còn lại Điều đó khá tốn thời giantrong trường hợp đồ thị có nhiều cạnh
Trang 16Chương 2 ĐƯỜNG ĐI EULER VÀ ĐỒ THỊ EULER
2.1 Tình huống dẫn nhập: “Bài toán 7 cây cầu”
Thành phố Konigsberg thuộc Phổ (nay là Kaliningrad thuộc Cộng hoà Nga),được chia làm 4 vùng bằng các nhánh sông Pregel Các vùng này gồm 2 vùngbên bờ sông (B, C), đảo Kneiphof (A) và một miền nằm giữa hai nhánh sôngPregel (D) Vào thế kỷ XVIII, người ta đã xây 7 chiếc cầu nối những vùngnày với nhau Người dân ở đây tự hỏi: Liệu có cách nào xuất phát tại một địađiểm
trong thành phố, đi qua 7 chiếc cầu, mỗi chiếc đúng 1 lần rồi quay trở về nơixuất phát không ?
Nhà toán học Thụy sĩ Leonhard Euler đã giải bài toán này và có thể coi đây làứng dụng đầu tiên của Lý thuyết đồ thị, ông đã mô hình hoá sơ đồ 7 cái cầubằng một đa đồ thị, bốn vùng được biểu diễn bằng 4 đỉnh, các cầu là các cạnh.Bài toán tìm đường qua 7 cầu, mỗi cầu đúng một lần có thể tổng quát hoábằng bài toán: Có tồn tại chu trình đơn trong đa đồ thị chứa tất cả các cạnh ?
Hình 2.1 Mô hình đồ thị của bài toán 7 cây cầu
Trang 172.2 Đường đi Euler và đồ thị Euler
2.2.1 Định nghĩa
Chu trình đơn chứa tất cả các cạnh của đồ thị G được gọi là chu trình Euler.Đường đi Euler trong G là đường đi đơn chứa mọi cạnh của G Đồ thị đượcgọi là đồ thị Euler nếu nó có chu trình Euler, và gọi là đồ thị nửa Euler nếu
nó có đường đi Euler
Ví dụ: xét các đồ thị sau
Chú thích:
Graph A: đồ thị không nửa Euler
Graph B: đồ thị nửa Euler
Graph C: đồ thị Euler
Điều kiện cần và đủ để một đồ thị là đồ thị Euler được Euler tìm ra vàonăm 1736 khi ông giải quyết bài toán hóc búa nổi tiếng thời đó về bảy cáicầu ở Konigsberg và đây là định lý đầu tiên của lý thuyết đồ thị
Trang 18[2] Đa đồ thị liên thông có đường đi Euler nhưng không có chu trìnhEuler nếu và chỉ nếu có đúng hai đỉnh bậc lẻ.
[3] Một đồ thi có hướng liên thông yếu G = (V, E) có chu trình Euler thìmọi đỉnh của nó có bán bậc ra bằng bán bậc vào: deg + (v) = deg - (v)(∀v∈V); Ngược lại, nếu G liên thông yếu và mọi đỉnh của nó có bánbậc ra bằng bán bậc vào thì G có chu trình Euler, hay G sẽ là liênthông mạnh
[4] Một đồ thị có hướng liên thông yếu G = (V, E) có đường đi Eulernhưng không có chu trình Euler nếu tồn tại đúng hai đỉnh u, v ∈ V saocho deg + (u) – deg - (u) = deg - (v) – deg + (v) = 1, còn tất cả nhữngđỉnh khác u và v đều có bán bậc ra bằng bán bậc vào
2.2.3 Thuật toán Fleury tìm chu trình Euler
Đối với đồ thị vô hướng liên thông, mọi đỉnh đều có bậc chẵn: xuất phát từmột đỉnh, ta chọn một cạnh liên thuộc với nó để đi tiếp theo hai nguyên tắcsau:
Mỗi khi đi qua một cạnh thì xoá nó đi, sau đó xoá đỉnh cô lập (nếucó)
Không bao giờ đi qua một cầu, trừ phi không còn cách đi nào khác
Và ta cứ chọn cạnh đi một cách thoải mái như vậy cho tới khi không đi tiếpđược nữa, đường đi tìm được chính là chu trình Euler
Ví dụ: cho đồ thị vô hướng G = (V, E) như hình vẽ
Trang 19Hình 2.2 Đồ thị EulerNếu xuất phát từ đỉnh 1, có hai cách đi tiếp: hoặc sang 2 hoặc sang 3, giả sử
ta sẽ sang 2 và xoá cạnh (1, 2) vừa đi qua Từ 2 chỉ có cách duy nhất làsang 4, nên cho dù (2, 4) là cầu ta cũng phải đi sau đó xoá luôn cạnh (2, 4).Đến đây, các cạnh còn lại của đồ thị có thể vẽ như trên bằng nét liền, cáccạnh đã bị xoá được vẽ bằng nét đứt Bây giờ đang đứng ở đỉnh 4 thì ta có
3 cách đi tiếp: sang 3, sang 5 hoặc sang 6 Vì (4, 3) là cầu nên ta sẽ không
đi theo cạnh (4, 3) mà sẽ đi (4, 5) hoặc (4, 6) Nếu đi theo (4, 5) và cứ tiếptục đi như vậy, ta sẽ được chu trình Euler là (1, 2, 4, 5, 7, 8, 6, 4, 3, 1) Còn
đi theo (4, 6) sẽ tìm được chu trình Euler là: (1, 2, 4, 6, 8, 7, 5, 4, 3, 1)
Chương 3 ĐƯỜNG ĐI HAMILTON VÀ ĐỒ THỊ HAMILTON 3.1 Tình huống dẫn nhập: “Đi vòng quanh thế giới”
Năm 1857, nhà toán học người Ailen là Hamilton(1805-1865) đưa ra trò chơi
“đi vòng quanh thế giới” như sau
Cho một hình thập nhị diện đều (đa diện đều có 12 mặt, 20 đỉnh và 30 cạnh),mỗi đỉnh của hình mang tên một thành phố nổi tiếng, mỗi cạnh của hình (nốihai đỉnh) là đường đi lại giữa hai thành phố tương ứng Xuất phát từ mộtthành phố, hãy tìm đường đi thăm tất cả các thành phố khác, mỗi thành phốchỉ một lần, rồi trở về chỗ cũ
Trang 20Trước Hamilton, có thể là từ thời Euler, người ta đã biết đến một câu đố hócbúa về “đường đi của con mã trên bàn cờ” Trên bàn cờ, con mã chỉ có thể đitheo đường chéo của hình chữ nhật 2 x 3 hoặc 3 x 2 ô vuông Giả sử bàn cờ
có 8 x 8 ô vuông Hãy tìm đường đi của con mã qua được tất cả các ô của bàn
cờ, mỗi ô chỉ một lần rồi trở lại ô xuất phát
Bài toán này được nhiều nhà toán học chú ý, đặc biệt là Euler, De Moivre,Vandermonde,
Hiện nay đã có nhiều lời giải và phương pháp giải cũng có rất nhiều, trong đó
có quy tắc: mỗi lần bố trí con mã ta chọn vị trí mà tại vị trí này số ô chưadùng tới do nó khống chế là ít nhất
Một phương pháp khác dựa trên tính đối xứng của hai nửa bàn cờ Ta tìmhành trình của con mã trên một nửa bàn cờ, rồi lấy đối xứng cho nửa bàn cờcòn lại, sau đó nối hành trình của hai nửa đã tìm lại với nhau
Trò chơi và câu đố trên dẫn tới việc khảo sát một lớp đồ thị đặc biệt, đó là đồthị Hamilton
3.2 Đường đi Hamilton và đồ thị Hamilton
3.2.1 Định nghĩa
Đườ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
Trang 21Hamilton Đồ thị G được gọi là đồ thị Hamilton nếu nó chứa chu trìnhHamilton và gọi là đồ thị nửa Hamilton nếu nó có đường đi Hamilton.
Ví dụ: xét các ví dụ sau
Chú thích:
Graph A: không là nửa Hamilton
Graph B: nửa Hamilton
Graph C: đồ thị Hamilton
3.2.2 Các định lý
[1] Đồ thị vô hướng G, trong đó tồn tại k đỉnh sao cho nếu xoá đi k đỉnh
này cùng với những cạnh liên thuộc của chúng thì đồ thị nhận được
sẽ có nhiều hơn k thành phần liên thông Thì khẳng định là G không
có chu trình Hamilton Mệnh đề phản đảo của định lý này cho ta điềukiện cần để một đồ thị có chu trình Hamilton
[2] Định lý Dirac: giả sử G là một đơn đồ thị liên thông có n đỉnh, trong
đó n > 2, khi đó G có chu trình Hamilton nếu bậc của mỗi đỉnh ítnhất bằng n/2
[3] Định lý Ore: Nếu G là một đơn đồ thị có n đỉnh, với n ≥ 3 sao cho
deg(u) + deg(v) ≥ n với mọi cặp đỉnh không liền kề u và v trong G,khi đó G sẽ có chu trình Hamilton