1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình toán rời rạc 2

137 1,1K 8
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo Trình Toán Rời Rạc 2
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Chuyên ngành Công Nghệ Phần Mềm
Thể loại Giáo trình
Năm xuất bản 2010
Thành phố Hưng Yên
Định dạng
Số trang 137
Dung lượng 2,25 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

Mở ñầu

Lý thuyết ñồ thị là một lĩnh vực ñã có từ lâu và có nhiều ứng dụng hiện ñại Những

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

ðồ thị ñược sử dụng ñể giải các bài toán trong nhiều lĩnh vực khác nhau Chẳng hạn, ñồ thị có thể sử dụng ñể xác ñịnh các mạch vòng trong vấn ñề giải tích mạch ñiện Chúng ta có thể phân biệt các hợp chất hóa học hữu cơ khác nhau với cùng công thức phân tử nhưng khác nhau về cấu trúc phân tử nhờ ñồ thị Chúng ta có thể xác ñịnh hai máy tính trong mạng có thể trao ñổi thông tin ñược với nhau hay không nhờ mô hình ñồ thị của mạng máy tính ðồ thị có trọng số trên các cạnh có thể sử dụng ñể giải các bài toán như: Tìm ñường ñi ngắn nhất giữa hai thành phố trong mạng giao thông Chúng ta cũng còn sử dụng ñồ thị ñể giải các bài toán về lập lịch, thời khóa biểu, và phân bố tần số cho các trạm phát thanh và truyền hình

Hưng Yên, tháng 7 năm 2010

Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường ñại học sư phạm kỹ thuật Hưng Yên

Trang 3

Mục lục

Mở ñầu 0

Danh mục các hình vẽ 4

Bài 1 Các khái niệm cơ bản của Lý thuyết ñồ thị .6

1.1 ðịnh nghĩa cơ bản về ñồ thị 6

1.2 ðường ñi chu trình ðồ thị liên thông 9

1.3 Phân loại ñồ thị 12

1.3.1 ðồ thị vô hướng liên thông 12

1.3.2 ðồ thị có hướng liên thông 14

1.4 Một số loại ñồ thị ñặc biệt 15

Bài 2 Biểu diễn ñồ thị trên máy tính 20

2.1 Một số phương pháp biểu diễn ñồ thị trên máy tính 20

2.2.1 Ma trận kề Ma trận trọng số 20

2.2.2 Danh sách cạnh (cung) 22

2.2.3 Danh sách kề 23

Bài 3 ðồ thị Euler 28

3.1 ðịnh nghĩa 28

3.2 Các ví dụ 29

3.3 ðịnh lý Euler và thuật toán Flor 29

Bài 4 ðồ thị Hamilton 33

4.1 ðịnh nghĩa 34

4.2 ðịnh lý và thuật toán liệt kê tất cả các chu trình Hamilton .35

Bài 5 Thảo luận cài ñặt ñồ thị, các thuật toán liệt kê chu trình Euler và Hamilton Thảo luận về bài tập lớn 38

5.1 Cài ñặt biểu diễn ñồ thị trên máy tính 38

5.2 Cài ñặt thuật toán liệt kê chu trình Euler 38

5.3 Cài ñặt thuật toán liệt kê chu trình Hamilton 40

Bài 6 Thuật toán tìm kiếm trên ñồ thị và ứng dụng 41

6.1 Duyệt ñồ thị theo chiều rộng (BFS) 41

6.2 Duyệt ñồ thị theo chiều sâu (DFS) 44

Bài 7 Cây và cây khung 45

7.1 Cây và cây khung 45

7.1.1 Cây 45

7.1.2 Cây khung của ñồ thị 47

7.2 Bài toán cây khung nhỏ nhất 47

7.3 Xây dựng tập các chu trình cơ bản của ñồ thị 49

7.4 Thuật toán Prim 50

7.5 Thuật toán Kruskal 54

Bài 8 Thảo luận về cài ñặt thuật toán tìm cây khung nhỏ nhất trên ñồ thị 57

8.1 Cài ñặt xây dựng tập các chu trình cơ bản của ñồ thị 57

8.2 Cài ñặt thuật toán Prim 59

8.3 Cài ñặt thuật toán Kruskal 60

Trang 4

8.4 Một số thuật toán xây dựng cây khung(*) 62

Bài 10 Bài toán tìm ñường ñi ngắn nhất 65

10.1 Các khái niệm mở ñầu 65

10.2 ðường ñi ngắn nhất xuất phát từ một ñỉnh Thuật toán Ford-Bellman 66

10.3 Trường hợp ma trận trọng số không âm Thuật toán Dijkstra 67

Bài 11 Bài toán tìm ñường ñi ngắn nhất (tiếp) 69

11.1 ðường ñi trong ñồ thị không có chu trình 69

11.2 ðường ñi ngắn nhất giữa tất cả các cặp ñỉnh 74

11.3 Cài ñặt thuật toán Dijkstra 75

Bài 12 Bài toán luồng cực ñại trong mạng 76

12.1 Mạng Luồng trong mạng Bài toán luồng cực ñại 76

12.2 Lát cắt ñường tăng luồng ðịnh lý ford_fulkerson 77

12.3 Thuật toán tìm luồng cực ñại 81

Bài 13 Lý thuyết ñồ thị và ứng dụng 91

13.1 Các bài toán liên quan tới ñồ thị 91

13.1.1 Các bài toán liên quan tới bậc của ñồ thị 91

13.1.2 Các bài toán liên quan ñến tính liên thông của ñồ thị 93

13.1.3 Các bài toán liên quan tới chu trình 94

13.1.4 Các bài toán có liên quan ñến ñường ñi và chu trình Hamilton 96

13.1.5 Các bài toán liên quan ñến ñồ thị tô màu 100

13.1.6 Bài toán về cây 110

13.1.7 Bài toán về ghép cặp 111

13.1.8 ðồ thị Euler 112

13.1.9 Các bài toán có tính tổng hợp 112

13.2 Sự liên hệ giữa các tập ñặc biệt trên ñồ thị với các bài toán trên bàn cờ 115

13.3 Duyệt rộng trên mảng hai chiều 119

Bài 14 Một số ứng dụng trong ñồ thị 126

14.1 Bài toán ñám cưới vùng quê 126

14.2 Bài toán về hệ thống ñại diện chung 127

14.3 Bài toán tối ưu rời rạc 128

Bài toán phân nhóm sinh hoạt 128

Bài toán lập lịch cho hội nghị 129

14.4 Một số bài toán liên quan ñến việc tổ chức mạng vận chuyển bưu chính 129

Mô hình ñịnh tuyến mạng ñường thư cấp 1 130

Bài toán lập kế hoạch vận chuyển bưu gửi 130

Mô hình mạng ñường thư trong thành phố 133

TÀI LIỆU THAM KHẢO 136

Trang 5

Danh mục các hình vẽ

Hình 1.1 Sơ ñồ mạng máy tính 6

Hình 1.2 Sơ ñồ mạng máy tính với ña kênh thoại .7

Hình 1.3 Sơ ñồ mạng máy tính với kênh thoại thông báo 7

Hình 1.4 Mạng máy tính với kênh thoại một chiều 8

Hình 1.5 ðường ñi trên ñồ thị 9

Hình 1.6 ðồ thị G và H .10

Hình 1.7 ðồ thị liên thông mạnh G và ñồ thị liên thông yếu H .12

Hình 1.8 ðồ thị vô hướng 13

Hình 1.9 ðồ thị có hướng .14

Hình 1.10 ðồ thị ñầy ñủ .15

Hình 1.11 ðồ thị vòng C3, C4, C5, C6 .16

Hình 1.12 ðồ thị bánh xe W3, W4, W5, W6 16

Hình 1.13 ðồ thị lập phương Q1, Q2, Q3 16

Hình 1.14 ðồ thị hai phía .17

Hình 1.15 ðồ thị K4 là ñồ thị phẳng .18

Hình 1.16 Các miền tương ứng với biểu diễn phẳng của ñồ thị 18

Hình 2.1 ðồ thị vô hướng G và ðồ thị có hướng G1 21

Hình 3.1 Mô hình 7 cây cầu ở Konigsberg 28

Hình 3.2 ðồ thị G1, G2, G3 .29

Hình 3.3 ðồ thị H1, H2, H3 .29

Hình 3.4 Minh hoạ cho chứng minh ðịnh lý 3.1 31

Hình 4.1 Du lịch 20 thành phố 33

Hình 4.2 ðồ thị Hamilton G3, nửa Hamilton G2 , và G1 .34

Hình 4.3 ðồ thị ñấu loại D5, ñấu loại liên thông mạnh D6 .36

Hình 4.4 ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui 37

Hình 5.1 ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui 40

Hình 6.1 ðồ thị vô hướng 42

Hình 7.1 Cây và rừng 45

Hình 7.2 ðồ thị và các cây khung của nó 47

Hình 7.3 ðồ thị và cây khung nhỏ nhất 53

Hình 8.1 Hệ chu trình ñộc lập cho ñồ thị vô hướng G 57

Hình 8.2 Hệ chu trình ñộc lập cho ñồ thị có hướng G1 57

Hình 8.3 Minh họa từng bước thuật toán Prim tìm cây khung nhỏ nhất 60

Hình 8.4 Minh họa từng bước thuật toán Kruskal tìm cây khung nhỏ nhất 61

Hình 11.1 ðồ thị không có chu trình 69

Hình 11.2 ðồ thị minh hoạ PERT .73

Hình 12.1 Mạng G và luồng f ðồ thị có trọng số Gf tương ứng .79

Hình 12.2 Mạng G và minh họa từng bước thuật toán Ford-Fullkerson 86

Hình 12.3 Mạng G với luồng cực ñại và lát cắt hẹp nhất 87

Hình 12.4 Ví dụ tồi tệ ñối với thuật toán Ford_Fulkerson .89

Hình 12.5 Tăng luồng dọc theo ñường tăng .90

Hình 13.1 Kết quả thi ñấu của 5 ñội bóng chuyền A, B, C, B, E 96

Hình 13.2 Sơ ñồ nhà của 8 học sinh 97

Trang 6

Hình 13.3 10 thành phố 98

Hình 13.4 bố trí lịch thi cho học sinh THPT với 7 môn thi trong 7 ngày 99

Hình 13.5 Vị trí nhà ở và ñường nối giữa các nhà của 9 học sinh 100

Hình 13.6 Bản ñồ có 6 miền 101

Hình 13.7 Lập lịch thi 7 môn 104

Hình 13.8 Tô màu cho ñồ thị lịch thi 105

Hình 13.9 Phân chia kênh truyền hình 107

Hình 13.10 Tô màu cho ñồ thị phân chia kênh truyền hình 107

Hình 13.11 Thanh ghi chỉ số trong CPU 109

Hình 13.12 Tô màu cho ñô thị thanh ghi chỉ số 110

Hình 13.13 Kết quả xếp hạng của các ñội 111

Hình 13.14 Tuyển chọn biên dịch viên 114

Hình 13.15 Quy tắc ñi của quân mã 116

Hình 13.16 Quy tắc ñi của quân mã trên bàn cờ 4 × 4 116

Hình 13.17 Quy tắc ñi của quân tượng trên bàn cờ 4 × 4 117

Hình 13.18 Quy tắc ñi của quân xe trên bàn cờ 4 × 4 117

Hình 13.19 Quy tắc ñi của quân hậu trên bàn cờ 4 × 4 118

Hình 13.20 Hướng di chuyển của robot 120

Hình 14.1 Mạng tương ứng với bài toán ñám cưới vùng quê .127

Trang 7

Bài 1 Các khái niệm cơ bản của Lý thuyết ñồ thị

Hình 1.1 Sơ ñồ mạng máy tính

Nhận thấy rằng trong mạng ở hình 1.1, giữa hai máy bất kỳ chỉ có nhiều nhất là một kênh thoại nối chúng, kênh thoại naỳ cho phép liên lạc cả hai chiều và không có máy tính nào lại ñược nối với chính nó Sơ ñồ mạng máy cho trong hình 1 ñược gọi là ñơn ñồ thị vô hướng Ta ñi ñến ñịnh nghĩa sau

Trang 8

Hình 1.2 Sơ ñồ mạng máy tính với ña kênh thoại

ðịnh nghĩa 1.2

ða ñồ thị vô hướng G= (V, E) bao gồm V là tập các ñỉnh, và E là tập các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh Hai cạnh e1 và e2 ñược gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp ñỉnh

Hình 1.3 Sơ ñồ mạng máy tính với kênh thoại thông báo

Rõ ràng mỗi ñơn ñồ thị ñều là ña ñồ thị, nhưng không phải ña ñồ thị nào cũng là ñơn ñồ thị, vì trong ña ñồ thị có thể có hai (hoặc nhiều hơn) cạnh nối một cặp ñỉnh nào

ñó

Trong mạng máy tính có thể có những kênh thoại nối một náy nào ñó với chính nó (chẳng hạn vời mục ñính thông báo) Mạng như vậy ñược cho trong hình 3 Khi ñó ña ñồ thị không thể mô tả ñược mạng như vậy, bởi vì có những khuyên (cạnh nối một ñỉnh với chính nó) Trong trường hợp nàychúng ta cần sử dụng ñến khái niệm giả ñồ thị vô hướng, ñược ñịnh nghĩa như sau:

ðịnh nghĩa 1.3

Trang 9

Giả ñồ thị vô hướng G = (V, E) bao gồm V là tập các ñỉnh và E là tập các cặp không có thứ tự gồm hai phần tử (không nhất thiết phải khác nhau) của V gọi là cạnh Cạnh e ñược gọi là khuyên nếu nó có dạng e = (u, u)

Hình 1.4 Mạng máy tính với kênh thoại một chiều

Các kênh thoại trong mạng máy tính có thể chỉ cho phép truyền tin theo một chiều Chẳng hạn, trong hình 1.4 máy chủ ở Hà Nội chỉ có thể nhận tin từ các máy ở ñịa phương,

có một số máy chỉ có thể gửi tin ñi, còn các kênh thoại cho phép truyền tin theo cả hai chiều ñược thay thế bởi hai cạnh có hướng ngược chiều nhau

Ta ñi ñến ñịnh nghĩa sau

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

Trang 10

1.2 ðường ñi chu trình ðồ thị liên thông

là ñơn nếu như không có cạnh nào bị lặp lại

Ví dụ 1.1 Trên ñồ thị vô hướng cho trong Hình 1.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, f, e, b là chu trình ñộ dài 4 ðườ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

Hình 1.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 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

ðịnh nghĩa 1.7

ðường ñi ñộ dài n từ ñỉnh u ñến ñỉnh v, trong ñó, n là số nguyên dương, trên ñồ thị có hướng G = (V, A) là dãy x0, x1,…, xn-1, xn

trong ñó u = x0, v = xn, (xi, xi+1)∈ E, i = 0, 1, 2,…, n-1

ðường ñi nói trên còn có thể biểu diễn dưới dạng dãy các cung:

(x0, x1), (x1, x2), …, (xn-1, xn)

Trang 11

ðỉnh u gọi là ñỉnh ñầu, còn ñỉnh v gọi là ñỉnh cuối của ñường ñi ðường ñi có ñỉnh ñầu trùng với ñỉnh cuối (tức là u = v) ñược gọi là 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

Ví dụ 1.2 Trên ñồ thị có hướng cho trong Hình 1.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, f, e, b là chu trình ñộ dài 4 ðườ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

Xét một mạng máy tính Một câu hỏi ñặt ra là hai máy tính bất kỳ trong mạng này

có thể trao ñổi thông tin ñược với nhau hoặc là trực tiếp qua kênh nối chúng hoặc thông qua một hoặc 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ị

Trang 12

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ị

Ví dụ 1.4 ðồ thị H trong hình 2 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 ñược ñưa ra trong ñịnh nghĩa sau

ðịnh nghĩa 1.10

ðỉnh v ñược gọi là ñỉnh rẽ nhánh 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ầ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ị

Ví dụ 1.5 Trong ñồ thị G ở hình2, ñỉnh d và e là ñỉnh rẽ nhánh, còn các cạnh (d, g) và (e, f) 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 1.11

ðồ 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ó

ðịnh nghĩa 1.12

ðồ 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 ví dụn dưới ñây

Ví dụ 1.6 Trong Hình 1.7 ñồ 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

Trang 13

Hình 1.7 ðồ thị liên thông mạnh G và ñồ 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ý dưới ñây cho ta tiêu chuẩn nhận biết một ñồ thị có là ñịnh hướng ñược hay không

ðịnh lý 1.1

ðồ 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 một ñồ 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 trên ít nhất 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 cá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

1.3 Phân loại ñồ thị

1.3.1 ðồ thị vô hướng liên thông

Trong mục này chúng ta 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

Trang 14

ðịnh nghĩa 1.13

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 là 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ó vao nhiêu cạnh liên thuộc với một ñỉnh, ta ñưa vào ñịnh nghĩa sau

deg(a) = 1, deg(b) = 4, deg(c) = 4, deg(f) = 3,

deg(d) = 1, 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 ví dụ trên ñỉnh g là ñỉnh cô lập, a và d là các ñỉnh treo Bậc của ñỉnh có tính chất sau:

ðịnh lý 1.2 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ố cung

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

Ví dụ 1.8 ðồ thị với n ñỉnh có bậc là 6 có bao nhiêu cạnh?

Giải: Theo ñịnh lý 1.2 ta có 2m = 6n Từ ñó suy ra tổng các cạnh của ñồ thị là 3n

Hệ quả 1.3 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

Trang 15

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ó

v

vv

2

Do deg(v) là chẵn với v là ñỉnh trong U nên tổng thứ nhất ở trên là số chẵn Từ ñó suy ra tổng thứ hai (chính là tổng bậc của các ñỉnh bậc lẻ) cũng phải là số chẵn, do tất cả các số hạng của nó là số lẻ, nên tổng này phải gồm một số chẵn các số hạng Vì vậy, số ñỉnh bậc lẻ phải là số chẵn

Ta xét các thuật ngữ tương tự cho ñồ thị vô hướng

1.3.2 ðồ thị có hướng liên thông

ðịnh nghĩa 1.15

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 này là ñi ra khỏi ñỉnh u và vào ñỉnh

v ðỉnh u(v) sẽ ñược gị 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 1.16

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))

Hình 1.9 ðồ thị có hướng

Ví dụ 1.9 Xét ñồ thị cho trong hình 1.10 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 16

Do mỗi cung (u, v) sẽ ñược tính một lần trong bán bậc vào của ñỉnh v và một lần trong bán bậc ra của ñỉnh u nên ta có:

ðịnh lý 1.3 Giả sử G = (V, E) là ñồ thị có hướng Khi ñó

2m = ∑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 Một số loại ñồ thị ñặc biệt

Trong mục này ta xét một số ñơn ñồ thị vô hướng dạng ñặc biệt xuất hiện trong nhiều vấn ñề ứng dụng thực tế

ðồ thị ñầy ñủ

ðồ thị ñầy ñủ n ñỉnh, ký hiệu bởi Kn, là ñơn ñồ thị vô hướngmà giữa hai ñỉnh bất

kỳ của nó luôn có cạnh nối

Các ñồ thị K3, K4, K5 cho trong hình dưới ñây

Hình 1.10 ðồ thị ñầy ñủ

ðồ thị ñầy ñủ Kn có tất cả n(n-1)/2 cạnh, nó là ñơn ñồ thị có nhiều cạnh nhất

ðồ 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)

ðồ thị vòng C3, C4, C5, C6 cho trong hình 2.2

Trang 17

ðồ thị lập phương n ñỉnh Qn là ñồ 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 Hình 1.13 cho thấy Qn với n=1,2,3

Hình 1.13 ðồ thị lập phương Q1, Q2, Q3

ðồ thị hai phía

Trang 18

ðơn ñồ thị G = (V, E) ñược gọi là 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

ðịnh lý sau ñây cho phép nhận biết một ñơn ñồ thị có phải là hai phía hay không

ðịnh lý 1.4 ðơ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 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 ñỉnh trong 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 thúc ngược lại, ñặt X = X ∪ T Tiếp tục xét như vậy ñối với T’ là tập các ñỉnh kề của T,

ðồ thị hai phía G=(X ∪ Y, E) với |X|= m, |Y| = n ñược gọi là ñồ thị hai phía ñầy

ñủ và ký hiệu là K2,3, K3,3, K3,4 ñược cho trong hình 2.5

Hình 1.14 ðồ thị hai phía

ðồ 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 cho cá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ị

Ví dụ ñồ thị K4 là phẳng, vì 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 (xem hình 2.6)

Trang 19

Hình 1.15 ðồ thị K4 là ñồ thị phẳng

Một ñiều ñáng lưu ý nếu ñồ thị là phẳng thì luôn có thể vẽ nó trên mặt phẳng với các cạnh nối là các ñoạn thẳng không cắt nhau ngoài ở ñỉnh (ví dụ xem cách vẽ K4 trong hình 2.6)

ðể nhận biết xem một ñồ thị có phải là ñồ thị phẳng có thể sử dụng ñịnh lý Kuratovski, mà ñể phát biểu nó ta cần một số khái niệm sau: Ta gọi một phép chia cạnh (u,v) của ñồ thị là việc loại bỏ cạnh này khỏi ñồ thị và thêm vào ñồ thị một ñỉnh mới w cùng với hai cạnh (u,w), (w, u) Hai ñồ thị G(V,E) và H=(W,F) ñược gọi là ñồng cấu nếu chúng có thể thu ñược từ cùng một ñồ thị nào ñó nhờ phép chia cạnh

ðịnh lý 1.5 (Kuratovski) ðồ thị là phẳng khi và chỉ khi nó không chứa ñồ thị con ñồng cấu với K3,3 hoặc K5

Trong trường hợp riêng, ñồ thị K3,3 hoặc K5 không phải là ñồ thị phẳng Bài toán về tính phẳng của ñồ thị K3,3 là bài toán ñố nổi tiếng về ba căn hộ và ba hệ thống cung cấp năng lượng cho chúng: Cần xây dựng hệ thống ñường cung cấp năng lượng với mỗi một căn hộ nói trên sao cho chúng không cắt nhau

ðồ thị phẳng còn tìm ñược những ứng dụng quan trọng trong công nghệ chế tạo mạch in

Biểu diễn phẳng của ñồ thị sẽ chia mặt phẳng ra thành các miền, trong ñó có thể có

cả miền không bị chặng Ví dụ, biểu diễn phẳng của ñồ thị cho trong Hình 1.16 chia mặt phẳng ra thành 6 miền R1, R2, .R6

Hình 1.16 Các miền tương ứng với biểu diễn phẳng của ñồ thị

Trang 20

Euler ñã chứng minh ñược rằng các cách biểu diễn phẳng khác nhau của một ñồ thị ñều chia mặt phẳng ra thành cùng một số miền ðể chứng minh ñiều ñó, Euler ñã tìm ñược mối liên hệ giữa số miền, số ñỉnh của ñồ thị và số cạnh của ñồ thị phẳng sau ñây ðịnh lý 1.6 (Công thức Euler) Giả sử G là ñồ thị phẳng liên thông với n ñỉnh, m cạnh Gọi r là số miền của mặt phẳng bị chia bởi biểu diễn phẳng của G Khi ñó

Giải Do mỗi ñỉnh của ñồ thị ñều có bậc là 3, nên tổng bậc của các ñỉnh là 3x20=60 Từ

ñó suy ra số cạnh của ñồ thị m=60/20=30 Vì vậy, theo công thức Euler, số miền cần tìm

r = 30-20+2=12

Trang 21

Bài 2 Biểu diễn ñồ thị trên máy tính

2.1 Một số phương pháp biểu diễn ñồ thị trên máy tính

ðể lưu trữ ñồ thị và thực hiện các thuật toán khác nhau với ñồ thị trên máy tính cần phải tìm những cấu trúc dữ liệu thích hợp ñể mô tả ñồ thị 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ả của thuật toán Vì vậy, việc chọn lựa cấu trúc dữ liệu ñể biểu diễn ñồ thị phụ thuộc vào từng tình huống cụ thể (bài toán và thuật toán cụ thể) Trong mục này chúng ta sẽ xét một số phương pháp cơ bản ñược sử dụng ñể biểu diễn ñồ thị trên máy tính, ñồng thời cũng phân tích một cách ngắn gọn những ưu ñiểm cũng như những nhược ñiểm của chúng

2.2.1 Ma trận kề Ma trận trọng số

Xét ñơn ñồ thị vô hướng G =(V,E), với tập ñỉnh V={1, 2, ,n} , tập cạnh E= {e1,

e2, ,em } Ta gọi ma trận kề của ñồ thị G là ma trận

A=( ai,j : i, j = 1, 2, ,n) Với các phần tử ñược xác ñịnh theo qui tắc sau ñây:

ai,j = 1 , nếu có cạnh từ i sang j hay (i, j) ∈ E, i, j =1, 2, ., n

ai, j = 0, trong trường hợp còn lại tức là không có cạnh(i, j)

Ví dụ 2.1 Ma trận trận kề của ñồ thị vô hướng G cho trong Hình 2.1 là:

Trang 22

Hình 2.1 ðồ thị vô hướng G và ðồ thị có hướng G1 Các tính chất của ma trận kề:

1) Rõ ràng ma trận kề của ñồ thị vô hướng là ma trận ñối xứng, tức là

a[i,j]=a[j,i], i,j =1,2, .,n Ngược lại, mỗi (0,1)-ma trận ñối xứng cấp n sẽ tương ứng, chính xác ñến cách ñánh số ñỉnh (còn nói là: chính xác ñến ñẳng cấu), với một ñơn ñồ thị

Ma trận kề của ñồ thị có hướng ñược ñịnh nghĩa một cách hoàn toàn tương tự

Ví dụ 2.2 ðồ thị có hướng G1 cho trong Hình 2.1 có ma trận kề là ma trận sau:

Chú ý: Trên ñây chúng ta chỉ xét ñơn ñồ thị Ma trận kề của ña ñồ thị có thể xây dựng hoàn toàn tương tự, chỉ khác là thay vì ghi 1 vào vị trí a[i,j] nếu (i,j) là cạnh của ñồ thị, chúng ta sẽ ghi k là số cạnh nối hai ñỉnh i, j

Trang 23

Trong rất nhiều vấn ñề ứng dụng của lý thuyết ñồ thị, mỗi cạnh e=(u,v) của ñồ thị ñược gán với một con số c(e) (còn viết là c(u,v) gọi là trọng số của cạnh e ðồ thị trong trường hợp như vậy ñược gọi là ñồ thị có trọng số Trong trường hợp ñồ thị có trọng số, thay vì mà trận kề, ñể biểu diễn ñồ thị ta sử dụng ma trận trọng số

C= {c[i,j], i, j = 1, 2, ., n}

với c[i,j]=c(i,j) nếu (i,j) ∈ E và c[i,j]= δ nếu (i, j) ∉ E

trong ñó số δ , tuỳ từng trường hợp cụ thể, có thể ñược ñặt bằng một trong các giá trị sau :

0, +∞ , -∞

Ưu ñiểm lớn nhất của phương pháp biểu diễn ñồ thị bằng ma trận kề (hoặc ma trận trọng số) là ñể trả lời câu hỏi: Hai ñỉnh u, v có kề nhau trên ñồ thị hay không, chúng ta chỉ phải thực hiện một phép so sánh nhược ñiểm lớn nhất của phương pháp này là : không phụ thuộc vào số cạnh của ñồ thị, ta luôn phải sử dụng n2 ñơn vị bộ nhớ ñể lưu trữ ma trận

Ví dụ 2.3 Danh sách cạnh (cung) của ñồ thị G (G1) cho trong Hình 2.1 là:

Trang 24

for u ∈ Ke(v) do Chẳng hạn, trên PASCAL có thể mô tả danh sách này như sau (Gọi là cấu trúc Forward Star):

Const

Trang 25

m=1000; {m-so canh}

n= 100; {n-so dinh}

var

Ke: array[1 m] of integer;

Tro: array[1 n+1] of integer;

Trong ñó Tro[i] ghi nhận vị trí bắt ñầu của danh sách kề của ñỉnh i, i=1, 2, .,n,

Tro[n+1]=2m+1

Khi ñó dòng lệnh qui ước

for u∈ Ke(v) do

begin end

Có thể thay thế bởi cấu trúc lệnh cụ thể trên PASCAL như sau

For i:=Tro[v] to Tro[v+1]-1 do

Trang 26

node=record v:integer;

for j:=1 to m do begin

write(‘Cho dinh dau va cuoi cua canh ‘,j,’:’);

Trang 27

writeln(‘Danh sachcac dinh ke cua dinh ‘,j,’:’);

t:=Ke[j];

while t^.next<>nil do begin

Trang 28

Hình 2.2 Danh sách kề của ñồ thị vô hướng G và có hướng G1 cho trong Hình 2.1

ðể ý rằng trong cách biểu diễn này chúng ta cần phải sử dụng cỡ m+n ñơn vị bộ nhớ

Trong các thuật toán mô tả ở các phần tiếp theo hai cấu trúc danh sách kề và ma trận trọng số ñược sử dụng thường xuyên

Trang 29

Bài 3 ðồ thị Euler

Có thể coi năm 1736 là năm khai sinh lý thuyết ñồ thị, với việc công bố lời giải

“bài toán về các cầu ở Konigsberg” của nhà toán học lỗi lạc Euler (1707-1783) Thành phố Konigsberg thuộc Phổ (nay gọi là Kaliningrad thuộc Nga) ñược chia thành bốn vùng bằng các nhánh sông Pregel, các vùng này gồm hai vùng bên bờ sông, ñảo Kneiphof và một miền nằm giữa hai nhánh của sông Pregel Vào thế kỷ 18, người ta xây bảy chiếc cầu nối các vùng này với nhau

Hình 3.1 Mô hình 7 cây cầu ở Konigsberg Dân thành phố từng thắc mắc: “Có thể nào ñi dạo qua tất cả bảy cầu, mỗi cầu chỉ một lần thôi không?” Nếu ta coi mỗi khu vực A, B, C, D như một ñỉnh và mỗi cầu qua lại hai khu vực là một cạnh nối hai ñỉnh thì ta có sơ ñồ của Konigsberg là một ña ñồ thị G như hình trên

Bài toán tìm ñường ñi qua tất cả các cầu, mỗi cầu chỉ qua một lần có thể ñược phát biểu lại bằng mô hình này như sau: Có tồn tại chu trình ñơn trong ña ñồ thị G chứa tất cả các cạnh?

3.1 ðịnh nghĩa

Chu trình ñơn trong ñồ thị G ñi qua mỗi cạnh của nó một lần ñược gọi là chu trình Euler ðường ñi ñơn trong G ñi qua mỗi cạnh của nó một lần ñược gọi là ñường ñi Euler

ðồ thị ñược gọ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

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 30

3.2 Các ví dụ

Ví dụ 3.1 ðồ thị G1 trong Hình 3.2 là ñồ thị Euler vì nó có chu trình Euler a, e, c, d, e, b,

a ðồ thị G3 không có chu trình Euler nhưng nó có ñường ñi Euler a, c, d, e, b, d, a, b, vì thế G3 là ñồ thị cửa Euler ðồ thị G2 không có chu trình cũng như ñường ñi Euler

Hình 3.2 ðồ thị G1, G2, G3

Ví dụ 3.2 ðồ thị H2 trong Hình 3.3 là ñồ thị Euler vì nó có chu trình Euler a, b, c, d, e, a

ðồ thị H3 không có chu trình Euler nhưng nó có ñường ñi Euler c, a, b, c, d, b vì thế H3 là

ñồ thị nửa Euler ðồ thị H1 không có chu trình cũng như ñường ñi Euler

Hình 3.3 ðồ thị H1, H2, H3 ð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 hóc búa nổi tiếng thế giới thời ñó về bảy cái cầu ở thành phố Konigsberg và ñây là ñịnh lý ñầu tiên của lý thuyết ñồ thị

3.3 ðịnh lý Euler và thuật toán Flor

ðịnh lý 3.1 (Euler) ðồ thị vô hướng liên thông G là ñồ thị Euler khi và chỉ khi mọi ñỉnh của G ñều có bậc chẵn

ðể chứng minh ñịnh lý trước hết ta chứng minh bổ ñể:

Bổ ñề 3.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

Trang 31

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

v → v1 →v2 → trong ñó v1 là ñỉnh kề với v, còn với i ≥ 1 chọn vi+1 ≠ vi-l (có thể chọn vi+1 như vậy là vì deg(vi) ≥2) 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 một ñỉ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à 1 chu trình cần tìm

Chứng minh ñịnh lý:

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ị ñiều có bậc chẵn

ðủ Quy nạp theo số ñỉnh và số cạnh của G Do G liên thông và deg(v) là số chẵn nên bậc của mỗi ñỉnh của nó không nhỏ hơn 2 Từ ñó theo bổ ñề 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ỏ khỏi G tất cả các cạnh thuộc C ta thu ñược một ñồ thị mới H vẫn có bậc là chẵn Theo giả thiết qui nạp, trong mỗi thành phần liên thông của

H ñiề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 v.v… Quá trình sẽ 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

Trang 32

Hình 3.4 Minh hoạ cho chứng minh ðịnh lý 3.1

Hệ quả 3.1 ðồ thị vô hướng liên thông G là nửa Euler khi và chỉ khi nó có 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ó chỉ có thể là 0 hoặc 2 Nếu G không có ñỉnh bậc lẻ thì theo ðịnh lý 3.1, 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,u) và(w,v) Khi ñó tất cả các ñỉnh của H ñiều có bậc chẵn, vì thế theo ðịnh lý 3.1, nó có chu trình Euler C Xoá bỏ khỏi chu trình này ñỉnh

w và hai cạnh kề nó ta thu ñược ñường ñi Euler trong ñồ thị G

Giả sử G là ñồ thị Euler, từ chứng minh ñịnh lý ta có thủ tục sau ñể tìm chu trình Euler trong G

Procedure Euler_Cycle;

Begin

STACK:=∅ ; CE:=∅ ; Chon u la mot dinh nao do cua do thi;

Trang 33

Else Begin

x⇐ STACK; CE⇐ x;

End;

End;

End;

Trang 34

Bài 4 ðồ thị Hamilton

ðể làm quen với chu chình Hamilton xin mở ñầu bằng bài toán du lịch kín quanh thế giới do Hamilton ñặt ra: Chon trươc 20 thành phố: A1 , A2 , , A20 ðể ñơn giản giả sử rằng các thành phố này là ñỉnh của một Hình 4.1 mặt ñều( ñó k ña diện có 12 mặt ngũ giác ñều và 20 ñỉnh) thay cho trái ñất, còn các cạnh của ña diện biểu hiện cho ñường ñi giữa các thành phố, trên Hình 4.1

Hình 4.1 Du lịch 20 thành phố Liệu một khách du lịch có thể tham quan tất cả 20 thành phố, qua mỗi thành phố ñúng một lầm rồi lại trở về ñược ñiểm xuất phát hay không? và có bao nhiêu cách ñi?

Hamilton ñã giải bài toán trên bằng cách chỉ ra nguyên tắc ñi như sau: khách du lịch khi ñến ñầu mút của mỗi cạnh, nếu anh ta chọn cạnh bên trái mình thì phép chọn ñược ký hiệu bằng T, chọn cạnh phía phải kí hiệu bằng chữ P, và ơ nguyên tại chỗ ký hiệu băng 1 Tích của phép chọn ñi theo cạnh phải rồi ñi tiếp theo cạnh trái, TTT, hay TTP là phép chọn ñi theo cạnh trái hai lần và ñi theo cạnh phải 1 lần.v.v Hai phép chọn bằng nhau,

Trang 35

nếu xuất phát từ cùng một ñiểm cả hai ñều cùng ñi tới một ñiểm Tích không có tính chất giao hoán (PT TP), nhưng có tính chất kết hợp ví dụ như (TT)P=T(TP)

Sau này lý thuyết về chu trình Hamilton sẽ giúp ta giải quyết các bài toán tương tự như bài toán du lịch ở trên

4.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 Hamilton ðồ thị G ñược gọi là ñồ thị 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

Rõ ràng ñồ thị Hamilton là nửa Hamilton, nhưng ñiều ngược lại không còn ñúng

Ví dụ 4.1 Trong hình 4.2: G3 là Hamilton, G2 là nửa Hamilton còn G1 không là nửa

Hamilton

Hình 4.2 ðồ thị Hamilton G3, nửa Hamilton G2 , và G1.Cho ñến nay việc tìm một tiêu chuẩn nhận biết ñồ thị Hamilton vẫn còn là mở, mặc

dù ñây là một vấn ñề trung tâm của lý thuyết ñồ thị Hơn thế nứa, cho ñến nay cũng chưa

có thuật toán hiệu quả ñể kiểm tra một ñồ thị có là Hamilton hay không Các kết quả thu ñược phần lớn là ñiều kiện ñủ ñể một ñồ thị là ñồ thị Hamilton Phần lớn chúng ñiều có

Trang 36

dạng "nếu G có số cạnh ñủ lớn thì G là Hamilton" Một kết quả như vậy ñược phát biểu trong ñịnh lý sau ñây

4.2 ðịnh lý và thuật toán liệt kê tất cả các chu trình Hamilton

ðịnh lý 4.1 (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ác ñỉnh 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 Khi ñó 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 thế 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 của chu trình nằm giữa 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 thu ñược ñã chứng minh ñịnh lý

ðịnh lý sau là tổng quát hoá của ñịnh lý Dirak cho ñồ thị có hướng:

ðịnh lý 4.2 Giả sử G là ñồ có hướng liên thông với n ñỉnh

Nếu deg+ (v) ≥ n/2, deg – (v) ≥ n/2,  ∀v thì G là Hamilton

Có một số dạng ñồ thị mà ta có thể biết khi nào là ñồ thị Hamilton Một ví dụ như vậy là ñồ thị ñấu loại ðồ thị ñấu loại là ñồ thị có hướng mà trong ñó hai ñỉnh bất kỳ của

nó ñược nối với nhau bởi ñúng một cung Tên ñấu loại xuất hiện như vậy vì ñồ thị như vậy có thể dùng ñể biểu diễn kết quả thi ñấu bóng chuyền, bóng bàn hay bất cứ một trò chơi nào mà không cho phép hoà Ta có ñịnh lý sau:

ðịnh lý 4.3

i) Mọi ñồ thị ñấu loại là nửa Hamilton

Trang 37

ii) Mọi ñồ thị ñấu loại liên thông mạnh là Hamilton

Ví dụ 4.2 ðồ thị ñấu loại D5, D6 ñược cho trong hình 4.3

Hình 4.3 ðồ thị ñấu loại D5, ñấu loại liên thông mạnh D6 Thuật toán liệt kê tất cả các chu trình Hamilton của ñồ thị

Thuật toán sau ñây ñược xây dựng dựa trên cơ sở thuật toán quay lui cho phép liệt kê tất

cả các chu trình Hamilton của ñồ thị

Trang 38

Ví dụ 4.3 Hình 4.4 dưới ñây mô tả cây tìm kiếm theo thuật toán vừa mô tả

Hình 4.4 ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui Trong trường hợp ñồ thị có không quá nhiều cạnh thuật toán trên có thể sử dụng ñể kiểm tra ñồ thị có phải là Hamilton hay không

Trang 39

Bài 5 Thảo luận cài ñặt ñồ thị, các thuật toán liệt kê chu trình Euler và Hamilton Thảo luận về bài tập lớn

5.1 Cài ñặt biểu diễn ñồ thị trên máy tính

Chương trình nhập danh sách kề của ñồ thị từ bàn phím và ñưa danh sách ñó ra màn hình Phân tích bài toán :

Trong rất nhiều thuật toán làm việc với ñồ thị chúng ta thường xuyên phải thực hiện các thao tác: Thêm hoặc bớt một số cạnh Trong trường hợp này Cấu trúc dữ liệu dùng ở trên

là không thuận tiện Khi ñó nên chuyển sang sử dụng danh sách kề liên kết (Linked

Adjancency List) như mô tả trong chương trình nhập danh sách kề của ñồ thị từ bàn phím

và ñưa danh sách ñó ra màn hình

5.2 Cài ñặt thuật toán liệt kê chu trình Euler

Tìm chu trình Euler trong ñồ thị G

Cài ñặt chương trình tìm chu trình Euler trong ñồ thị G

Cho ñồ thị G=(X,E) tồn tại chu trình Euler Hãy tìm chu trình (chi trình Euler là chu trình

ñi qua tất cả các cạnh của ñồ thị, mỗi cạnh ñi qua ñúng một lần)

Phân tích bài toán :

ðầu vào: ðồ thị G

ðầu ra: Chu trình Euler (nếu có)

2 Thuật toán:

Xuất phát từ một ñỉnh u bất kỳ, khi ñi qua cạnh nào thì xoá cạnh ñó khỏi ñồ thị và ghi lại

từ trái sang phải Khi thực hiện thuật toán cần lưu ý nếu gặp cạnh bắc cầu giữa 2 thành phần liên thông thì ta phải xoá hết thành phần liên thông rồi mới xoá ñến cạnh bắc cầu Khi xoá cạnh bắc cầu thì phải loại hết các ñỉnh trơ trọi (nghĩa là không kề với bất cứ ñỉnh nào thuộc ñồ thị)

Cấu trúc dữ liệu:

Biểu diễn ñồ thị bằng ma trận kề a(i,j), do ñó lưu ý khi xoá ñi một cạnh ta chỉ việc gán a(i,j)=a(j,i)=0, ñồng thời phải lưu cạnh vừa xoá vào một mảng khác: Mảng Ctr

Trang 40

Mảng lt: array [1…Nmax] of integer dùng trong thủ tục tìm thành phần liên thông (giống như một thuật toán tìm thành phần liên thông trình bày ở trên)

Mảng dd: array [1…Nmax] of Boolean, giá trị dd[i] cho biết ñỉnh i bị loại khỏi ñồ thị hay chưa Nếu bị lại thì dd[i]=True; ngược lại dd[i]=False;

Ngày đăng: 20/10/2013, 15:15

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Lý thuyết tổ hợp và ủồ thị, Ngụ ðắc Tõn, Viện Toỏn Học, NXB ðại học Quốc Gia Hà Nội, 2003 Khác
[2] Toán rời rạc, Nguyễn ðức Nghĩa, Nguyễn Tô Thành, NXB Giáo dục, Hà nội 1997 Khác
[3] Lý thuyết ủồ thị, ðặng Huy Ruận, NXB ðHQG, 1997 Khác
[4] Discrete Mathematics and Its Applications, 6th Edition, Kenneth H. Rosen, McGraw Hill, 2007 Khác
[5] Handbook of Discrete and Combinatorial Mathematics, Kenneth H.Rosen (chief of editor), CRC Press, 2000 Khác

HÌNH ẢNH LIÊN QUAN

Hỡnh 1.1 Sơ ủồ mạng mỏy tớnh. - Giáo trình toán rời rạc 2
nh 1.1 Sơ ủồ mạng mỏy tớnh (Trang 7)
Hỡnh 1.2 Sơ ủồ mạng mỏy tớnh với ủa kờnh thoại. - Giáo trình toán rời rạc 2
nh 1.2 Sơ ủồ mạng mỏy tớnh với ủa kờnh thoại (Trang 8)
Hình 1.4 Mạng máy tính với kênh thoại một chiều. - Giáo trình toán rời rạc 2
Hình 1.4 Mạng máy tính với kênh thoại một chiều (Trang 9)
Hỡnh 1.5 ðường ủi trờn ủồ thị - Giáo trình toán rời rạc 2
nh 1.5 ðường ủi trờn ủồ thị (Trang 10)
Hỡnh 1.7 ðồ thị liờn thụng mạnh G và ủồ thị liờn thụng yếu H. - Giáo trình toán rời rạc 2
nh 1.7 ðồ thị liờn thụng mạnh G và ủồ thị liờn thụng yếu H (Trang 13)
Hỡnh 2.2 Danh sỏch kề của ủồ thị vụ hướng G và cú hướng G 1  cho trong Hỡnh 2.1. - Giáo trình toán rời rạc 2
nh 2.2 Danh sỏch kề của ủồ thị vụ hướng G và cú hướng G 1 cho trong Hỡnh 2.1 (Trang 28)
Hình 3.1 Mô hình 7 cây cầu ở Konigsberg - Giáo trình toán rời rạc 2
Hình 3.1 Mô hình 7 cây cầu ở Konigsberg (Trang 29)
Hình 3.2 ðồ thị G 1 , G 2 , G 3 . - Giáo trình toán rời rạc 2
Hình 3.2 ðồ thị G 1 , G 2 , G 3 (Trang 30)
Hình 3.4 Minh hoạ cho chứng minh ðịnh lý 3.1. - Giáo trình toán rời rạc 2
Hình 3.4 Minh hoạ cho chứng minh ðịnh lý 3.1 (Trang 32)
Hình 4.1 Du lịch 20 thành phố - Giáo trình toán rời rạc 2
Hình 4.1 Du lịch 20 thành phố (Trang 34)
Hình 4.4 ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui. - Giáo trình toán rời rạc 2
Hình 4.4 ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui (Trang 38)
Hỡnh dưới ủõy mụ tả cõy tỡm kiếm theo thuật toỏn vừa mụ tả. - Giáo trình toán rời rạc 2
nh dưới ủõy mụ tả cõy tỡm kiếm theo thuật toỏn vừa mụ tả (Trang 41)
Bảng dưới ủõy ghi nhón của cỏc ủỉnh trong cỏc bước lặp của thuật toỏn, ủỉnh ủỏnh  dấu * là ủỉnh ủược chọn ủể bổ sung vào cõy khung (khi ủú nhón của nú khụng cũn bị biến  ủổi trong cỏc bước lặp tiếp theo, vỡ vậy ta ủỏnh dấu – ủể ghi nhận ủiều ủú): - Giáo trình toán rời rạc 2
Bảng d ưới ủõy ghi nhón của cỏc ủỉnh trong cỏc bước lặp của thuật toỏn, ủỉnh ủỏnh dấu * là ủỉnh ủược chọn ủể bổ sung vào cõy khung (khi ủú nhón của nú khụng cũn bị biến ủổi trong cỏc bước lặp tiếp theo, vỡ vậy ta ủỏnh dấu – ủể ghi nhận ủiều ủú): (Trang 54)
Hình 7.3 ðồ thị và cây khung nhỏ nhất. - Giáo trình toán rời rạc 2
Hình 7.3 ðồ thị và cây khung nhỏ nhất (Trang 54)

TỪ KHÓA LIÊN QUAN

w