Bài toán về đường đi (phần hai) chapter05 path 02

10 1 0
Bài toán về đường đi (phần hai) chapter05 path 02

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

Thông tin tài liệu

CHƯƀNG 5 BÕI TOÆN Vổ ĒƯỜNG Ä’I (PHẦN HAI) CHƯƠNG 5 BÀI TOÁN VỀ ĐƯỜNG ĐI (PHẦN HAI) Bùi Tiến Lên Đại học Khoa học Tự nhiên 01/01/2017 NỘI DUNG 1 ĐƯỜNG ĐI CÓ RÀNG BUỘC ĐƯỜNG ĐI CÓ RÀNG BUỘC[.]

NỘI DUNG CHƯƠNG BÀI TOÁN VỀ ĐƯỜNG ĐI (PHẦN HAI) Bùi Tiến Lên ĐƯỜNG ĐI CÓ RÀNG BUỘC Đại học Khoa học Tự nhiên 01/01/2017 ĐƯỜNG ĐI CÓ RÀNG BUỘC Bài toán đồ thị Euler Lịch sử Bài tốn có nguồn gốc từ tốn dân gian Làm qua cầu lần trở nơi xuất phát Bài toán nhà bác học Euler giải trọn vẹn vào năm 1736 B C D A (a) bảy cầu (b) biểu diễn đồ thị Hình 5.1: Bài tốn bảy cầu Spring 2017 Graph Theory Định nghĩa đồ thị Euler Định nghĩa đồ thị Euler (cont.) Định nghĩa 5.2 Định nghĩa 5.1 I Cho đồ thị G = (V , E ) I I I I Dây chuyền Euler (Euler path) dây chuyền qua tất cạnh đồ thị cạnh qua lần I Chu trình Euler (Euler circuit) dây chuyền Euler có đỉnh đầu trùng với đỉnh cuối Đồ thị Euler vô hướng (Euler graph) đồ thị vơ hướng có chứa chu trình Euler Đồ thị Euler có hướng (Euler graph) đồ thị có hướng chứa chu trình Euler Đường Euler (Euler path) đường qua tất cạnh đồ thị cạnh qua lần Mạch Euler (Euler circuit) đường Euler có đỉnh đầu trùng với đỉnh cuối Spring 2017 Graph Theory Spring 2017 Graph Theory Định lý chu trình Euler Thuật tốn Hierholzer tìm chu trình Euler Định lý 5.1 Cho đồ thị liên thông G = (V , E ) có tất đỉnh bậc chẵn Thuật tốn Hierholzer thực theo nguyên lý tắc sau Một đa đồ thị vô hướng liên thông G = (V , E ) có chu trình Euler đỉnh có bậc chẵn I Chứng minh Spring 2017 I Graph Theory Từ đỉnh v tìm chu trình C đồ thị G Nếu C khơng phải chu trình Euler chu trình C có đỉnh u có cạnh khơng thuộc chu trình C I Loại bỏ cạnh C khỏi đồ thị G I Từ đỉnh u tìm chu trình C đồ thị G I Kết hợp chu trình C vào chu trình C I Quay lại kiểm tra C có phải chu trình Euler hay không? Spring 2017 Graph Theory Cài đặt thuật toán Hierholzer Minh họa cài đặt thuật toán Hierholzer Thuật tốn cài đặt stack sau Tìm chu trình Euler đồ thị đỉnh Algorithm Tìm chu trình Euler C đỉnh start 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: procedure find_euler_circle(G, start, C) stack.push(start) while stack.not_empty v = stack.top if khơng cịn cạnh kề với v then stack.pop C = C + {v} else Lấy cạnh (v, u) kề với đỉnh v Xóa cạnh (v, u) stack.push(u) Spring 2017 Hình 5.2: Đồ thị liên thơng có đỉnh bậc chẵn Graph Theory Spring 2017 Graph Theory 10 Minh họa cài đặt thuật toán Hierholzer (cont.) Minh họa cài đặt thuật toán Hierholzer (cont.) stack = {1} C = {∅} stack = {1, 2} C = {∅} Hình 5.3: Đưa đỉnh đầu vào stack Spring 2017 Graph Theory Hình 5.4: Đưa đỉnh vào stack xóa cạnh (1,2) 11 Spring 2017 Graph Theory 12 Minh họa cài đặt thuật toán Hierholzer (cont.) Minh họa cài đặt thuật toán Hierholzer (cont.) stack = {1, 2, 4} C = {∅} stack = {1, 2, 4, 3} C = {∅} Hình 5.5: Đưa đỉnh vào stack xóa cạnh (1,4) Spring 2017 Hình 5.6: Đưa đỉnh vào stack xóa cạnh (4,3) Graph Theory 13 Spring 2017 Graph Theory 14 Minh họa cài đặt thuật toán Hierholzer (cont.) Minh họa cài đặt thuật toán Hierholzer (cont.) stack = {1, 2, 4, 3, 1} C = {∅} stack = {1, 2, 4, 3} C = {1} Hình 5.7: Đưa đỉnh vào stack xóa cạnh (3,1) Spring 2017 Graph Theory Hình 5.8: Lấy đỉnh khỏi stack thêm vào chu trình C 15 Spring 2017 Graph Theory 16 Minh họa cài đặt thuật toán Hierholzer (cont.) Minh họa cài đặt thuật toán Hierholzer (cont.) stack = {1, 2, 4} C = {1, 3} stack = {1, 2, 4, 5} C = {1, 3} Hình 5.9: Lấy đỉnh khỏi stack thêm vào chu trình C Spring 2017 Graph Theory Hình 5.10: Đưa đỉnh vào stack xóa cạnh (4,5) 17 Spring 2017 Graph Theory 18 Minh họa cài đặt thuật toán Hierholzer (cont.) Minh họa cài đặt thuật toán Hierholzer (cont.) stack = {1, 2, 4, 5, 7} C = {1, 3} stack = {1, 2, 4, 5, 7, 8} C = {1, 3} Hình 5.11: Đưa đỉnh vào stack xóa cạnh (5,7) Spring 2017 Graph Theory Hình 5.12: Đưa đỉnh vào stack xóa cạnh (7,8) 19 Spring 2017 Graph Theory 20 Minh họa cài đặt thuật toán Hierholzer (cont.) Minh họa cài đặt thuật toán Hierholzer (cont.) stack = {1, 2, 4, 5, 7, 8, 6} C = {1, 3} stack = {1, 2, 4, 5, 7, 8, 6, 4} C = {1, 3} Hình 5.13: Đưa đỉnh vào stack xóa cạnh (8,6) Spring 2017 21 Spring 2017 Minh họa cài đặt thuật toán Hierholzer (cont.) Bài tập stack = {∅} C = {1, 3, 4, 6, 8, 7, 5, 4, 2, 1} Bài tập 5.1 Graph Theory Graph Theory 22 10 Hình 5.16: Đồ thị Euler? Hình 5.15: Lần lượt lấy đỉnh khỏi stack thêm vào chu trình C Spring 2017 Áp dụng thuật tốn Hierholzer tìm chu trình Euler cho đồ thị sau Hình 5.14: Đưa đỉnh vào stack xóa cạnh (6,4) Graph Theory 23 Spring 2017 Graph Theory 24 Thuật tốn Fleury tìm chu trình Euler Định lý đường Euler Cho đồ thị liên thơng G = (V , E ) có tất đỉnh bậc chẵn Thuật toán Fleury thực theo hai qui tắc Định lý 5.2 I I Một đa đồ thị vô hướng liên thông G = (V , E ) có đường Euler đồ thị có đỉnh bậc lẻ Quy tắc 1: Mỗi qua cạnh xóa cạnh xóa đỉnh lập (nếu có) Chứng minh Sinh viên tự chứng minh Quy tắc 2: Không qua cạnh cầu khơng cịn cách khác Spring 2017 Graph Theory 25 Spring 2017 Graph Theory 26 Đường Euler cho đồ thị có hướng Bài tốn người đưa thư Trung Hoa Định lý 5.3 Bài toán 5.1 Bài toán người đưa thư Trung Hoa (Chinese postman problem) phát biểu sau: Cho đồ thị liên thơng tìm chu trình ngắn qua cạnh Một đa đồ thị có hướng liên thơng G = (V , E ) có chu trình Euler đỉnh v đồ thị có d + (v) = d − (v) Chứng minh Sinh viên tự chứng minh I Định lý 5.4 I Một đa đồ thị có hướng liên thơng G = (V , E ) có đường Euler tất đỉnh v đồ thị có d + (v) = d − (v) trừ đỉnh x, y Nếu đồ thị khơng có trọng số chu trình ngắn chu trình có số cạnh Nếu đồ thị có trọng số chu trình ngắn chu trình có trọng số nhỏ d + (x) = d − (x) + 1, d + (y) + = d − (y) Chứng minh Sinh viên tự chứng minh Spring 2017 Graph Theory 27 Spring 2017 Graph Theory 28 Bài toán đồ thị Hamilton Định nghĩa đồ thị Hamilton Lịch sử Định nghĩa 5.3 I I Bài tốn xuất phát từ trị đố vui William Rowan Hamilton, nhà toán học người Ailen đưa vào năm 1857 Cho đồ thị G = (V , E ) Giả sử có khối thập nhị diện với mặt ngũ giác Mỗi đỉnh 20 đỉnh khối đặt tên thành phố Hãy tìm cách khép kín ghé thăm 20 thành phố lần I I I I Dây chuyền Hamilton (Hamilton path) dây chuyền qua tất đỉnh đồ thị đỉnh qua lần Chu trình Hamilton (Hamilton circuit) dây chuyền Hamilton có đỉnh đầu trùng với đỉnh cuối Đường Hamilton (Hamilton path) đường qua tất đỉnh đồ thị đỉnh qua lần Mạch Hamilton (Hamilton circuit) đường Hamilton có đỉnh đầu trùng với đỉnh cuối Hình 5.17: Khối thập nhị diện chu trình Hamilton Spring 2017 Graph Theory 29 Định nghĩa đồ thị Hamilton (cont.) Graph Theory 30 Các điều kiện đủ Định nghĩa 5.4 I Spring 2017 Định lý 5.5 (Ore, 1960) Đồ thị Hamilton (Hamilton graph) đồ thị có chứa chu trình Hamilton Cho đơn đồ thị liên thông G = (V , E ) với số đỉnh n ≥ 3, ∀u, v ∈ V , d(u) + d(v) ≥ n đồ thị có chu trình Hamilton Chứng minh Sinh viên tự chứng minh Spring 2017 Graph Theory 31 Spring 2017 Graph Theory 32 Các điều kiện đủ (cont.) Các điều kiện đủ (cont.) Định lý 5.6 (Dirac, 1952) Định lý 5.7 (Posa) Cho đơn đồ thị liên thông G = (V , E ) với số đỉnh n ≥ 3, ∀v ∈ V , d(v) ≥ n2 đồ thị có chu trình Hamilton Cho đơn đồ thị liên thông G = (V , E ) với số đỉnh n ≥ 3; giả sử có khơng q k − đỉnh có bậc khơng lớn k với n−1 k ∈ n−1 có khơng q n−1 2 đỉnh có bậc vượt q với n lẻ Khi đồ thị G có chu trình Hamilton Chứng minh Sinh viên tự chứng minh Spring 2017 Chứng minh Sinh viên tự chứng minh Graph Theory 33 Spring 2017 Graph Theory 34 Phương pháp tìm chu trình Hamilton Minh họa Thuật tốn tìm chu trình Hamilton có độ phức tạp lũy thừa Tuy nhiên, q trình tìm chu trình Hamilton ta áp dụng quy tắc sau Tìm chu trình Hamilton đồ thị I I I I I 16 Quy tắc 1: Nếu đồ thị có đỉnh lập đỉnh treo đồ thị khơng có chu trình Hamilton Quy tắc 2: Nếu đỉnh v có bậc d(v) = hai cạnh kề với phải thuộc chu trình Hamilton 20 Quy tắc 3: Khi hai cạnh có chung đỉnh v thuộc chu trình Hamilton cạnh kề cịn lại v khơng thuộc chu trình Hamilton 13 19 12 Quy tắc 5: Tận dụng tính đối xứng đồ thị để giảm bớt trường hợp Graph Theory 14 Quy tắc 4: Tránh tạo chu trình Spring 2017 15 11 17 10 18 Hình 5.18: Đồ thị biểu diễn khối thập nhị diện 35 Spring 2017 Graph Theory 36 Minh họa Bài tập Nhánh 16 15 20 14 13 Spring 2017 12 19 X X 11 17 X X 10 18 Thực Bắt đầu đỉnh Chọn đỉnh 2, cạnh (1,2) Chọn đỉnh 3, cạnh (2,3) xóa cạnh (2,13) chọn cạnh (12, 13), (13,14) Chọn đỉnh 4, cạnh (3,4) xóa cạnh (3,15) chọn cạnh (14, 15), (15,6) xóa cạnh (14,20) chọn cạnh (19, 20), (20,16) Chọn đỉnh 5, cạnh (4,5) xóa cạnh (4,7) chọn cạnh (6, 7), (7,8) xóa cạnh (6,16) chọn cạnh (16, 17) Graph Theory 37 Bài toán người bán hàng Bài tập 5.2 Hãy tìm chu trình Hamilton (nếu có) đồ thị sau a b c d e f g h i Hình 5.19: Đồ thị Hamilton? Spring 2017 Graph Theory 38 Graph Theory 40 Tài liệu tham khảo Bài toán 5.2 Bài toán người bán hàng (travelling salesman problem) phát biểu sau: Cho đồ thị liên thơng tìm chu trình ngắn qua đỉnh I I Nếu đồ thị khơng có trọng số chu trình ngắn chu trình có số cạnh Nếu đồ thị có trọng số chu trình ngắn chu trình có trọng số nhỏ Spring 2017 Graph Theory 39 Spring 2017 ... 2017 Graph Theory 25 Spring 2017 Graph Theory 26 Đường Euler cho đồ thị có hướng Bài toán người đưa thư Trung Hoa Định lý 5.3 Bài toán 5.1 Bài toán người đưa thư Trung Hoa (Chinese postman problem)... Spring 2017 Graph Theory 28 Bài toán đồ thị Hamilton Định nghĩa đồ thị Hamilton Lịch sử Định nghĩa 5.3 I I Bài tốn xuất phát từ trị đố vui William Rowan Hamilton, nhà toán học người Ailen đưa vào... Hình 5.19: Đồ thị Hamilton? Spring 2017 Graph Theory 38 Graph Theory 40 Tài liệu tham khảo Bài toán 5.2 Bài toán người bán hàng (travelling salesman problem) phát biểu sau: Cho đồ thị liên thơng

Ngày đăng: 25/03/2023, 13:10

Tài liệu cùng người dùng

Tài liệu liên quan