Chƣơng 5 ĐỒ THỊ EULER VÀ HAMILTON
5.2 Đƣờng đi Hamilton và đồ thị Hamilton
5.2.1 chu trình Hamilton
Cho G= (V, E) là đồ thị vô hƣớng. Chu trình Hamilton là chu trình đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần. Ví dụ: Xét đồ thị sau G Đồ thị G có các chu trình Hamilton sau: 125341 12 3541 145321 143521 5.2.2 ĐƢỜNG ĐI HAMILTON
Đƣờng Hamilton trong đồ thị G=(V, E) là đƣờng đi qua tất cả các đỉnh của đồ thị,
mỗi đỉnh đúng một lần. Ví dụ: Xét đồ thị sau
Giáo trình Tốn rời rạc trang 63 Đồ thị G c các đƣờng Hamilton sau:
bacd badc
5.2.3 ĐỊNH LÝ DIRAK
Giả sử G = (V, E) là đơn đồ thị vô hƣớng liên thông với n đỉnh (n>2). Nếu mỗi đỉnh của G đều có bậc khơng nhỏ hơn n/2 thì G là đồ thị Hamilton.
Giả sử G = (V, E) là đơn đồ thị có hƣớng, liên thông mạnh với n đỉnh. Nếu mọi đỉnh của G đều có bán bậc ra và bán bậc vào khơng nhỏ hơn n/2 thì G là đồ thị Hamilton.
Giả sử G = (V, E) là đồ thị có hƣớng và đầy đủ. Khi đ trong đồ thị luôn luôn tồn tại đƣờng Hamilton.
Hệ quả: Giả sử G = (V, E) là đồ thị đầy đủ với số đỉnh 3. Khi đ trong đồ thị ln ln tồn tại chu trình Hamilton
5.2.4 THUẬT TỐN TÌM ĐƢỜNG CHU TRÌNH HAMILTON
Đến nay, việc tìm tiêu chuẩn để nhận biết đồ thị Hamilton vẫn là mở và cũng chƣa có thuật tốn hiệu quả để kiểm tra một đồ thị có là Hamilton hay khơng.
Quy tắc để tìm đƣờng/ chu trình Hamilton:
Qui tắc 1: Lấy hết các cạnh kề với đỉnh bậc 2.
Qui tắc 2: Khơng cho phát sinh chu trình ít hơn n cạnh.
Qui tắc 3: Nếu đã lấy hai cạnh kề với đỉnh x thì có thể bỏ tất cả các cạnh còn
lại kề với x.
Qui tắc 4: Duy trì tính liên thơng và bảo đảm bậc mỗi đỉnh luôn lớn hơn hay
bằng 2
Cách thực hiện:
Bắt đầu từ một đỉnh, đi theo đƣờng dài nhất có thể đƣợc (depth-first)
Nếu đƣờng đ chứa mọi đỉnh và có thể nối hai đỉnh đầu và cuối bằng 1 cạnh thì đ là chu trình hamilton
Ngƣợc lại, lùi lại một đỉnh để mở con đƣờng theo chiều sâu khác Cứ tiếp tục quá trình trên cho đến khi duyệt hết các đỉnh của đồ thị. Ví dụ: Tìm chu trình/đƣờng Hamilton cho đồ thị sau:
Giáo trình Tốn rời rạc trang 64 Duyệt theo chiều sâu ta có cây sau:
Các Chu trình Hamilton c trong đồ thị: 123451 125341 143521 145321 Các đƣờng Hamilton c trong đồ thị: 12345 12533 14325 14523
Giáo trình Tốn rời rạc trang 65
BÀI TẬP THỰC HÀNH SỐ 5 V. Thông tin chung:
Mã số bài tập : BT-ToanRR-05
Hình thức nộp bài : Nộp qua Moodle mơn học Thời hạn nộp bài : … / … / ……
Nội dung : Chƣơng 5: Đồ thị EULER và đồ thị HAMILTON
BÀI TẬP Ở LỚP
1. Đồ thị nào sau đây c chu trình Euler. Xây dựng chu trình Euler nếu tồn tại
A B
C D
Giáo trình Tốn rời rạc trang 66
G H
2. Hãy xác định xem trong các đồ thị bài tập 1 c đƣờng đi Euler không. Hãy xây dựng đƣờng Euler nếu có.
3. Hãy xác định số lần nhỏ nhất cần phải nâng bút khỏi giấy khi vẽ các đồ thị trong bài tập 1 mà không đƣợc vẽ lại bất kỳ phần nào của đồ thị.
4. Đồ thị nào sau đây c chu trình/đƣờng Euler. Xây dựng chu trình/đƣờng Euler nếu tồn tại.
I J
Giáo trình Tốn rời rạc trang 67
M N
5. Tìm các giá trị sau của n để các đồ thị sau có chu trình Euler? a. Kn
b. Cn c. Wn
6. Với giá trị nào của n thì các đồ thị trong bài tập 4 c đƣờng Euler mà khơng có chu trình Euler?
7. Với giá rị nào của m,n thì đồ thị hai phía đầy đủ Km,n có : a. Chu trình Euler
b. Đƣờng Euler
8. Hãy nêu các thuật tốn xây dựng đƣờng đi/chu trình Euler trong đồ thị vơ hƣớng / c hƣớng.
9. Cho các đồ thị sau đồ thị nào tồn tại chu trình Hamilton. Nếu khơng tồn tại hãy chỉ ra yếu tố nào chứng tỏ khơng tồn tại chu trình Hamilton trong đồ thị:
Giáo trình Tốn rời rạc trang 68
S T
U V
BÀI TẬP Ở NHÀ
10. Các đồ thị trong bài tập 9 có tồn tại đƣờng Hamilton không? Hãy xây dựng đƣờng Hamilton nếu có.
11. Với giá trị nào của n để các đồ thị sau có chu trình Hamilton? a. Kn
b. Cn c. Wn
12. Với giá trị nào của m,n thì đồ thị hai phía đầy đủ Km,n có Chu trình Hamilton? 13. Ngồi 7 chiếc cầu đã xây dựng từ thế kỷ 18 ở Kaliningrad, ngƣời ta xây dựng
thêm hai chiếc cầu nữa nối khu B với khu C và khu B với khu D. Một ngƣời nào đ c thể đi qua 9 chiếc cấu, mỗi chiếc đi qua đúng một lần, và trở về nơi xuất phát đƣợc khơng?
Giáo trình Tốn rời rạc trang 69
CHƢƠNG 6. MỘT SỐ BÀI TOÁN TỐI ƢU TRÊN ĐỒ THỊ Mục tiêu:
Học xong chƣơng này sinh viên c thể:
- Trình bày và giải quyết bài tốn tìm đƣờng đi ngắn nhất - Trình bày và giải quyết bài tốn cây khung tối tiểu
Nội dung:
6.1 ĐỒ THỊ CÓ TRỌNG SỐ VÀ BÀI TOÁN ĐƢỜNG ĐI NGẮN NHẤT
6.1.1 GIỚI THIỆU
Nhiều bài toán trong thực tế có thể mơ hình hóa bằng đồ thị có trọng số. Đ là đồ thị mà mỗi cạnh của n đƣợc gán một con số nguyên hoặc số thực gọi là trọng số của cạnh đ .
Giả sử ta cần mơ hình hóa hệ thống đƣờng hàng khơng. Trong mơ hình mỗi thành phố đƣợc biểu diễn bằng một đỉnh của đồ thị, mỗi chuyến bay là một cạnh nối hai đỉnh tƣơng ứng với trọng số là phí hành khách phải trả cho chuyến bay.
Yêu cầu đặt ra là hành trình nào giữa hai thành phố Honolulu (a) và Heathrow London (b) có chi phí nhỏ nhất?
6.1.1.1 Đồ thị có trọng số:
Đồ thị G = (V, E) Đồ thị G = (V,E) gọi là đồ thị có trọng số (hay chiều dài, trọng lƣợng) nếu mỗi cạnh(cung) e đƣợc gán với một số thực w(e).Ta gọi w(e) là trọng lƣợng của e.
Độ dài của đƣờng đi từ u đếnvbằng tổng độ dài các cạnh mà đƣờng đi qua. Khoảng cách giữa 2 đỉnh u,v là độ dài ngắn nhất của các đƣờng đi từ u đến v.
Giáo trình Tốn rời rạc trang 70 Cho G = (V, E), V = {v1, v2,…,vn} là đơn đồ thị có trọng số.
Ma trận trọng số của G là ma trận D= (aij) xác định nhƣ sau:
{ ( ) ( ) ( ) ∈ Ví dụ:
6.1.2 THUẬT TỐN BELLMAN-FORD
6.1.2.1 Ý tưởng thuật tốn Bellman-Ford
Thuật tốn Ford-Bellman dùng để tìm đƣờng đi ngắn nhất từ một đỉnh s đến tất cả các đỉnh còn lại của đồ thị. Đƣợc sử dụng cho đồ thị khơng có chu trình âm.
Cho đồ thị c hƣớng, có trọng số G = (V, E). Trọng số của các cạnh của G đƣợc tính nhƣ sau:
TrongSo(u, v) = ∞ nếu cung (u, v) ∉E. TrongSo(u, v) = a(u, v) nếu cung (u, v) ∈E.
Thuật tốn tìm đƣờng đi ngắn nhất d(v) từ đỉnh s đến đỉnh v, v ∈V:
Xét cạnh (u,v) Nếu d(u) + TrongSo(u, v) < d(v)thì ta thay d(v) = d(u) + TrongSo(u, v)
Quá trình này sẽ đƣợc lặp lại cho đến khi khơng thể có giá trị d(v) tốt hơn.
6.1.2.2 Ví dụ
Giáo trình Tốn rời rạc trang 71 Đồ thị trên liên thơng mạnh và khơng có chu trình âm. Áp dụng thuật tốn Bellman- Ford
Đƣờng đi ngắn nhất từ 1 đến 5 là: 1235 với trọng số là -1
6.1.3 THUẬT TỐN DIJKSTRA
Thuật tốn Dijkstra dùng để tìm đƣờng đi ngắn nhất từ một đỉnh s đến tất cả các đỉnh còn lại của đồ thị. Đƣợc sử dụng cho đồ thị khơng có cung trọng số âm.
6.1.3.1 Ý tưởngThuật toán Dijkstra
Phƣơng pháp xác định tuần tự các đỉnh có khoảng cách đến u0 từ nhỏ đến lớn Bƣớc 1: Đỉnh có khoảng cách nhỏ nhất đến u0 là u0
Bƣớc 2: Trong V\{u0} tìm đỉnh có khoảng cách đến u0 nhỏ nhất ( đỉnh này phải là một trong các đỉnh kề với u0)_ giả sử là u1
Bƣớc 3:Trong V\{u0, u1} tìm đỉnh có khoảng cách đến u0 nhỏ nhất ( đỉnh này phải là một trong các đỉnh kề với u0, u1)
Bƣớc 4:lặp lại bƣớc 3 cho đến khi V\{u0,u1,…}=
6.1.3.2 Ví dụ
Giáo trình Tốn rời rạc trang 72 Bước Đỉn h được chọn V-s D[1 ], pre[1] D[2 ], pre[2] D[3 ], pre[3] D[4 ], pre[4] Khởi tạo 0 1,2,3 ,4 ,0 9,0 2,0 5,0 1 3 1,2,4 3,3 9,0 5,0 2 1 2,4 7,1 5,0 3 4 2 6,4 4 2 3,3 6,4 2,0 5,0 Đƣờng đi ngắn nhất từ 0 đến 1 là: 031 với trọng số là 3. 6.2 CÂY KHUNG NHỎ NHẤT 6.2.1 ĐỊNH NGHĨA CÂY KHUNG
Một cây khung (spanning tree) T của một đồ thị liên thông G là đồ thị con của G thoả:
T là một cây.
T chứa tất cả các đỉnh của G
Cho G là đồ thị có trọng số, các cạnh e có trọng số w(e) dƣơng. Tồn tại cây khung có tổng trọng số các cạnh là nhỏ nhất là cây khung tối tiểu (minimum spanning tree).
Giáo trình Tốn rời rạc trang 73 Cây khung tối tiểu T = {AE, AB, BD, BC} với w(T) = 2 + 4 + 3 + 6 = 15.
6.2.2 THUẬT TOÁN K.RUSKAL
6.2.2.1 Ý tưởng thuật tốn:
1. Xóa các khun trong G (nếu có)
2. Xóa cạnh song song trong G (giữ lại cạnh có trọng số nhỏ nhất) (nếu có) 3. Đặt T = .
4. Đƣa vào T cạnh có w(e) nhỏ nhất trong số các cạnh chƣa chọn sao cho T khơng tạo thành chu trình.
5. Nếu T c đủ n – 1 cạnh thì dừng. Cịn khơng thì tiếp tục bƣớc 2.
6.2.2.2 Ví dụ
1. T = . 2. T = {AE} 3. T = {AE, BD} 4. T = {AE, BD, AB}
Giáo trình Tốn rời rạc trang 74
6.2.3 THUẬT TOÁN PRIMM
6.2.3.1 Ý tưởng thuật toán:
1. X = {x0}. T = .
2. Thêm vào T cạnh có w(e) nhỏ nhất nối một đỉnh x trong X và một đỉnh y ngồi X sao cho T khơng thành chu trình.
a. X = X + {y}; T = T + {xy}.
3. Nếu X đủ n đỉnh thì dừng. Cịn khơng thì tiếp tục bƣớc 2.
6.2.3.2 Ví dụ:
1. X = {A}; T = . 2. X = {A, E}; T = {AE}.
3. X = {A, E, B}; T = {AE, AB}.
4. X = {A, E, B, D}; T = {AE, AB, BD}.
Giáo trình Tốn rời rạc trang 75
BÀI TẬP THỰC HÀNH SỐ 6 I. Thông tin chung:
Mã số bài tập : BT-ToanRR-06
Hình thức nộp bài : Nộp qua Moodle mơn học Thời hạn nộp bài : … / … / ……
Nội dung : Chƣơng 6: Một số bài toán tối ƣu trên đồ thị
BÀI TẬP
1/ Sử dụng thuật toán Dijstra và Ford-Bellman
st
az?
Giáo trình Tốn rời rạc trang 76
f c?
fg?
Giáo trình Tốn rời rạc trang 77 1….
Giáo trình Tốn rời rạc trang 78 2/Dùng thuậ t toậ n Prim, Kruskậl tì m cậ y khung to i thiể u cu ậ cậ c đo thi trể n.
Giáo trình Tốn rời rạc trang 79
Tài liệu tham khảo
[1] Toán học rời rạc ứng dụng trong tin học Kenneth H.Rosen (sách dịch), NXB Khoa học kỹ thuật 2003, 980 trang
[2] Toán rời rạc ứng dụng trong Tin học, Đỗ Đức Giáo, Nhà xuất bản Giáo dục, 2009, 407 trang.