Chu trình Hamilton tổng quát trong đồ thị vô hướng Nguyễn Văn Thái.

66 583 0
Chu trình Hamilton tổng quát trong đồ thị vô hướng  Nguyễn Văn Thái.

Đ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

i ĐẠI HỌC THÁI NGUYÊN TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THƠNG TIN VÀ TRUYỀN THƠNG NGUYỄN VĂN THÁI CHU TRÌNH HAMILTON TỔNG QUÁT TRONG ĐỒ THỊ VÔ HƢỚNG Chuyên ngành: Khoa học máy tính Mã số: 60.48.01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC: GS.TS: ĐẶNG QUANG Á Thái Nguyên – 2014 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ ii MỤC LỤC MỤC LỤC i LỜI CAM ĐOAN iv LỜI CẢM ƠN v DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT vi DANH MỤC HÌNH vii MỞ ĐẦU Chƣơng I: MỘT SỐ KHÁI NIỆM CƠ BẢN TRONG LÝ THUYẾT ĐỒ THỊ VÀ LÝ THUYẾT CÁC BÀI TOÁN NP-C 1.1 Lý thuyết đồ thị 1.1.1 Các thuật ngữ 1.1.2 Đường đi, chu trình, đồ thị liên thơng 10 1.1.3 Biểu diễn đồ thị máy tính 13 1.2 Lý thuyết lớp toán P NP 17 1.2.1 Khái niệm loại thời gian tính 17 1.2.2 Khái niệm phép quy dẫn đa thức 18 1.2.3 Lớp toán P 18 1.2.3 Lớp toán NP 19 1.2.4 Lớp toán NP-đầy đủ (NP-Complete) 19 1.3 Kết luận 20 Chƣơng II: CHU TRÌNH HAMILTON 21 2.1 Chu trình Hamilton: Định nghĩa, tính chất điều kiện đủ 21 2.1.1 Một số khái niệm 21 2.1.2 Một số tính chất đồ thị Hamilton 22 2.2 Thuật tốn tìm chu trình Hamilton 26 2.3 Đồ thị Hamilton tối đại 29 2.3.1 Khái niệm 30 2.3.2 Thuật toán xây dựng đồ thị Hamilton tối đại n ≥ đỉnh [1] 30 2.3 Kết luận 31 Chƣơng III: CHU TRÌNH TRỘI 32 3.1 Khái niệm chu trình trội điều kiện đủ 32 3.1.1 Khái niệm: 32 3.1.2 Một số điều kiện đủ chu trình trội 33 3.1.3 Chu trình trội lớp đồ thị 2-liên thơng thỏa mãn (G) Số hóa Trung tâm Học liệu 36 http://www.lrc-tnu.edu.vn/ iii 3.2 Thuật toán xác định chu trình trội 40 3.2.1 Thuật toán: (Xác định đồ thị G có chu trình trội hay khơng?) 41 3.2.2 Thuật toán 2.1: (kiểm tra đồ thị liên thông) 42 3.2.3 Thuật toán 2.2: (kiểm tra đồ thị 2-liên thông) 42 3.2.4 Thuật tốn 3.1: Kiểm tra đồ thị G có thuộc lớp K1 hay không? 43 3.2.5 Thuật tốn 3.2: Kiểm tra đồ thị G có thuộc lớp K2 hay không? 43 3.2.6 Thuật tốn 3.3: Kiểm tra đồ thị có thuộc K3 hay không? 44 3.2.7 Thuật tốn 3.4: Kiểm tra đồ thị G có thuộc lớp K4 hay không? 45 3.2.8 Thuật tốn 3.5: Kiểm tra đồ thị G có thuộc lớp K5 hay không? 45 3.3 Cài đặt thử nghiệm: 47 3.3.1 Phát biểu toán 47 3.3.2 Công cụ lựa chọn 47 3.3.3 Xây dựng, phát triển chương trình 47 3.3.4 Giao diện chương trình 51 3.3.5 Thử nghiệm đánh giá 55 3.4 Kết luận: 55 PHẦN KẾT LUẬN 56 TÀI LIỆU THAM KHẢO 57 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ iv LỜI CAM ĐOAN Tôi xin cam đoan kết nêu luận văn kết tìm hiểu, nghiên cứu hướng dẫn GS.TS: Đặng Quang Á Mọi trích dẫn sử dụng báo cáo ghi rõ nguồn tài liệu tham khảo theo quy định Tác giả Nguyễn Văn Thái Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ v LỜI CẢM ƠN Trước tiên, xin gửi lời cảm ơn đến tất quý thầy cô giảng dạy chương trình đào tạo Cao học chuyên ngành Khoa học máy tính K11 trường Đại học Cơng nghệ thông tin truyền thông – Đại học Thái Nguyên tổ chức đào tạo, người truyền đạt cho tơi kiến thức hữu ích làm sở cho thực tốt luận văn Tác giả xin chân thành cảm ơn thầy cô, người tận tình hướng dẫn truyền đạt kinh nghiệm quý báu học tập nghiên cứu tận tình giúp đỡ tơi Đặc biệt tơi xin bày tỏ lòng cảm ơn xâu sắc tới GS.TS Đặng Quang Á, người tận tình hướng dẫn, quan tâm, đóng góp ý kiến cho tơi xuất thời gian thực luận văn Mặc dù trình thực luận văn có giai đoạn khơng thuận lợi Thầy hướng dẫn, bảo cho nhiều kinh nghiệm thời gian thực luận văn Sau xin gửi lời biết ơn sâu sắc đến gia đình ln tạo điều kiện tốt cho tơi suốt q trình học thực luận văn Do thời gian có hạn kinh nghiệm nghiên cứu khoa học chưa nhiều nên luận văn cịn nhiều thiếu sót, mong nhận ý kiến góp ý Thầy/Cơ anh chị học viên Thái Nguyên, tháng năm 2014 Nguyễn Văn Thái Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ vi DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Ký hiêu Từ viết tắt Diễn giải V Tập đỉnh đồ thị E Tập cạnh đồ thị G=(V,E) Đồ thị G với tập đỉnh V, tập cạnh E |V|, |V(G)| Số đỉnh đồ thị |E|, |E(G)| Số đỉnh đồ thị deg(v), degG(v) Bậc đỉnh v đồ thị G , (G) Bậc nhỏ đỉnh G Kn Đồ thị đầy đủ n đỉnh Cn Đồ thị vòng n đỉnh Wn Đồ thị bánh xe n đỉnh W(G) Số thành phần liên thông G k-liên thơng Đồ thị có số liên thơng k k(G) Chỉ số liên thông đồ thị G P Deterministic Polynomial NP Nondeterministic Polynomial NP-C NP-Complete HC Hamilton cycle DC Dominating cycle NTM Nondeterministic Turing Machine DTM Deterministic Turing Machines  Phép quy dẫn đa thức K Lớp đồ thị đặc biệt K K1, K2, K3, K4, K5 Các đồ thị đặc biệt K1, K2, K3, K4, K5 Hợp s đồ thị đầy đủ lạ Hợp s đồ thị đầy đủ lạ Kn Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ vii DANH MỤC HÌNH Trang Hình 1.1 Đồ thị vơ hướng .5 Hình 1.2 Đồ thị vơ hướng bậc đỉnh Hình 1.3 Một số đồ thị đầy đủ Hình 1.4 Đồ thị vòng Hình 1.5 Đồ thị bánh xe Hình 1.6 Đồ thị hai phía Hình 1.7 Đồ thị G1 đẳng cấu với G2 .8 Hình 1.8 Đồ thị G đồ thị G’ Hình 1.9 Đơn đồ thị G1, G2 đồ thị G = G1  G2 Hình 1.10 Đường đồ thị có độ dài 10 Hình 1.11 Đồ thị G liên thông, đồ thị G’ không liên thơng 11 Hình 1.12 Đồ thị liên thông G đồ thị H gồm thành phần liên thơng H1, H2, H3 11 Hình 1.13 Đồ thị 4-liên thông .12 Hình 1.14 Đồ thị có k(G) = k(H) = 13 Hình 1.15 Đồ thị ma trận kề 14 Hình 1.16 Đồ thị ma trận trọng số 15 Hình 1.17 Đồ thị danh sách cạnh .16 Hình 1.18 Đồ thị danh sách kề tương ứng .17 Hình 2.1 Đồ thị có đường Hamilton, khơng có chu trình Hamilton 21 Hình 2.2 Đồ thị Hamilton .22 Hình 2.3 Đồ thị K5 có chu trình Hamilton (a→b→c→d→e→a) 23 Hình 2.4 Đồ thị có đỉnh, đỉnh có bậc ≥ n/2 24 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ viii Hình 2.5 Đồ thị G gồm đỉnh, cạnh 28 Hình 2.6 Cây liệt kê chu trình Hamilton theo thuật tốn quay lui .28 Hình 2.7 Đồ thị liệt kê chu trình Hamilton theo thuật tốn quay lui 29 Hình 2.8 Đồ thị thị hamilton tối đại G3 30 Hình 3.1 Đồ thị có chu trình Hamilton, có nhiều chu trình Dominating 32 Hình 3.2 Đồ thị khơng có chu trình Hamilton, có mội chu trình Dominating .32 Hình 3.3 Đồ thị 2-liên thơng với chu trình Dominating dài độ dài 33 Hình 3.4 Đồ thị G có chu trình dài (độ dài 6) chu trình Dominating .34 Hình 3.5 Đồ thị G G’ xây dựng từ đồ thị G 35 Hình 3.6 Đồ thị K1 37 Hình 3.7 Đồ thị K2 38 Hình 3.8 Đồ thị K3 38 Hình 3.9 Đồ thị K4 39 Hình 3.10 Đồ thị K5 40 Hình 3.11 Giao diện bắt đầu chạy chương trình 51 Hình 3.12 Form nạp lưu đồ thị từ tập tin có sẵn chứa ma trận kề đồ thị 52 Hình 3.13 Form kết kiểm tra đồ thị .52 Hình 3.14 Đồ thị không thỏa mãn điều kiện kiểm tra 53 Hình 3.15 Form kiểm tra tính liên thơng đồ thị .53 Hình 3.16 Form kiểm tra đồ thị với số đỉnh lớn 54 Hình 3.17 Form thơng tin chương trình 54 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ MỞ ĐẦU Đặt vấn đề: Lý thuyết đồ thị lĩnh vực nghiên cứu từ năm đầu kỷ 18 nhà toán học Leonhard Euler người Thụy sĩ Đồ thị sử dụng để giải nhiều toán nhiều lĩnh vực khác nhau, tin học trường hợp cụ thể Trong năm 70 kỷ 20, giới chứng kiến phát triển nhanh chóng rộng lớn lý thuyết đồ thị, số có số lượng đáng kể cơng trình nghiên cứu cấu trúc chu trình đồ thị, đặc biệt chu trình Hamilton cịn nhiều vấn đề mở Nghiên cứu cấu trúc chu trình đồ thị giúp giải tốt toán tối ưu đời sống Chẳng hạn, lĩnh vực chế tạo robot thám hiểm, chuyển gửi tín hiệu hình ảnh qua vệ tinh, tốn phân tích hệ thống tương tác tiện ích website, Trong số cấu trúc đồ thị chu trình Hamilton đóng vai trị đặc biệt quan trọng Đó chu trình qua tất đỉnh đồ thị, đỉnh lần Bài toán chu trình Hamilton tốn xác định xem liệu đồ thị có chứa chu trình Hamilton khơng tìm chu trình Bài tốn chứng minh NP-C (NP- đầy đủ) Chính khơng tồn thuật tốn đa thức giải nó, để giải toán nhiều thuật toán gần nghiên cứu Một mở rộng chu trình Hamilton chu trình trội (Dominating cycle) Bài toán chứng minh NP-C Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ Việc tìm hiểu chu trình Hamilton chu trình trội, dấu hiệu nhận biết chúng thuật toán xác định, cải tiến phát triển chúng việc làm có ý nghĩa khoa học thực tiễn Đây mục đích luận văn Mục tiêu luận văn: Đối tượng nghiên cứu luận văn vấn đề cấu trúc chu trình liên quan đến chu trình Hamilton chu trình trội đồ thị Phạm vi nghiên cứu Luận văn tập trung nghiên cứu kiến thức có liên quan, sở lý thuyết như: Lý thuyết đồ thị lý thuyết tốn NP-C, chu trình Hamilton chu trình trội Nhiệm vụ nghiên cứu - Tìm hiểu kiến thức tổng quan đồ thị lý thuyết tốn NP-C - Tìm hiểu đồ thị Hamilton mở rộng - Tìm hiểu thuật tốn tìm chu trình Hamilton - Xây dựng thuật toán đa thức xác định tồn chu trình trội đồ thị cho trước - Cài đặt thuật toán Tổ chức luận văn: Luận văn bao gồm phần mở đầu, chương nội dung, phần kết luận, phần phụ lục tài liệu tham khảo Chương I: Một số kiến thức lý thuyết đồ thị lý thuyết toán NP-C Chương II: Chu trình Hamilton Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 44 Bước 1: gán r =  Bước 2: Kiểm tra |V| = 15 không? Nếu khơng khơng phải K2 Bước 3: Chọn ba đỉnh u, v, w có bậc lớn (deg(u) = deg(v) = deg(w) = max(deg(i)) = k) Nếu k < 12 khơng phải K2 Bước 4: Tìm đồ thị đầy đủ mà đỉnh gồm đỉnh (K3) Nếu khơng có khơng phải K2 Bước 5: Kiểm tra đỉnh đồ thị đầy đủ K3 xem có nối với ba đỉnh u, v, w khơng? Nếu khơng khơng phải K2 3.2.6 Thuật tốn 3.3: Kiểm tra đồ thị có thuộc K3 hay khơng? Để kiểm tra G có thuộc K3 hay khơng ta kiểm tra xem G có tập đỉnh S gồm r-1 đỉnh có bậc ≥ 2(r-1) Nếu có, bỏ chúng G phân rã thành r – đồ thị đầy đủ mà đồ thị có đỉnh đỉnh nối tới r-1 đỉnh thuộc S Các bước thực hiện: Bước 1: gán r =  Bước 2: Kiểm tra |V| = 3r khơng? Nếu khơng khơng phải K3 Bước 3: Chọn tập S gồm r – đỉnh ( j  S|deg(j) = max(deg(i)) = k) Nếu k < 2(r-1) khơng phải K3 Bước 4: Tìm r-1 đồ thị đầy đủ (K2) đồ thị đầy đủ K3 Nếu khơng có khơng phải K3 Bước 5: Kiểm tra đỉnh thuộc tập S có nối với đồ thị đầy đủ khơng? Nếu khơng khơng phải K3 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 45 3.2.7 Thuật toán 3.4: Kiểm tra đồ thị G có thuộc lớp K4 hay khơng? Để kiểm tra G có thuộc K4 hay khơng ta kiểm tra xem G có chứa đỉnh u, v có bậc lớn ≥ 3r cho bỏ đồ thị G trở thành đồ thị đầy đủ mà đồ thị gồm r đỉnh hay không, đỉnh nối với u, v không? Các bước thực hiện: Bước 1: gán r =  - Bước 2: Kiểm tra |V| = 3r+2 không? Nếu khơng khơng phải K4 Bước 3: Chọn hai đỉnh u, v có bậc lớn (deg(u) = deg(v) = max(deg(i)) = k) Nếu k < 3r khơng phải K4 Bước 4: Tìm K_(r, r, r) (3 đồ thị đầy đủ mà đồ thị gồm r đỉnh) Nếu khơng có khơng phải K4 Bước 5: Kiểm tra đỉnh K_(r, r, r) có nối với hai đỉnh u, v không? Nếu không khơng phải K4 3.2.8 Thuật tốn 3.5: Kiểm tra đồ thị G có thuộc lớp K5 hay khơng? Để kiểm tra G có thuộc K5 hay khơng ta kiểm tra xem G có tập S gồm r đỉnh có bậc ≥ 2(r+1) cho bỏ đỉnh thuộc S đồ thị G phân rã thành r+1 đồ thị đầy đủ gồm đỉnh hay không, đỉnh nối với đỉnh tập S Các bước thực hiện: Bước 1: gán r =  - Bước 2: Kiểm tra |V| = 3r+2 khơng? Nếu khơng khơng phải K5 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 46 Bước 3: Chọn tập S gồm r đỉnh có bậc lớn ( j  S|deg(j) = max(deg(i)) = k) Nếu k < 2(r+1) khơng phải K5 Bước 4: Tìm r+1 đồ thị đầy đủ K2 Nếu khơng có khơng phải K5 Bước 5: Kiểm tra đỉnh r+1 đồ thị đầy đủ K2 có nối với r đỉnh tập S khơng? Nếu khơng khơng phải K5 Đánh giá độ phức tạp thuật toán: Với việc đồ thị tổ chức ma trận kề, độ phức tạp thuật toán xác định sau: Bước 1: Để tính bậc cho đỉnh O(n2) phép toán Bước 2: Sắp xếp dãy bậc đỉnh theo chiều giảm dần bậc đỉnh: độ phức tạp O(n2) kiểm tra (G) O(1) Như bước thời gian O(n2) Bước 3: Kiểm tra đồ thị 2-liên thơng: Sử dụng thuật tốn 2.1 để kiểm tra tính liên thơng đồ thị O(n2) phép tính Lặp lại n lần việc xóa đỉnh kiểm tra tính liên thơng đồ thị thu (thuật tốn 2.2), tồn bước có độ phức tạp O(n3) Bước 4: Kiểm tra xem đồ thị có thuộc lớp đồ thị đặc biệt K hay không Để đánh giá độ phức tạp bước 4, ta tiến hành đánh giá độ phức tạp thuật toán 3.1, 3.2, , 3.5 Vì thuật tốn tương tự nên ta xét độ phức tạp thuật toán (giả sử chọn thuật toán 3.1) Trong bước bước thuật tốn 3.1 O(1) phép tính Bước có độ phức tạp O(r) với r số phần tử thuộc tập S Trong bước 4, đỉnh cần kiểm tra đỉnh kề với xét xem tập đỉnh có tạo nên đồ thị đầy đủ hay không Việc kiểm tra có phải đồ thị đầy đủ hay khơng O(n2) phép tính Do bước O(n3) phép toán Bước O(n2) phép toán Như Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 47 thuật tốn 3.1 có độ phức tạp O(n3) để kiểm tra đồ thị có thuộc vào lớp đồ thị K1 hay khơng Tóm lại thuật tốn xác định tồn chu trình trội lớp đồ thị 2-liên thơng thỏa  O(n3), độ phức tạp thời gian đa thức Như ta thấy toán xác định tồn chu trình trội đồ thị G thuộc lớp NP-C, tốn tốn xác định tồn chu trình trội lớp đồ thị 2-liên thông thỏa  lại thuộc lớp P có độ phức tạp tính tốn thời gian đa thức 3.3 Cài đặt thử nghiệm: 3.3.1 Phát biểu tốn Cho trước đồ thị vơ hướng G Hãy kiểm tra xem G có phải lớp đồ thị 2liên thơng thỏa mãn (G) hay khơng, G có tồn chu trình trội hay khơng? 3.3.2 Cơng cụ lựa chọn Việc lựa chọn ngơn ngữ lập trình cho nội dung tốn vấn đề quan trọng ngơn ngữ lập trình có ưu điểm nhược điểm định Để hoàn thành ứng dụng chương trình Demo viết ngơn ngữ lập trình C# Visual Studio 2010, chương trình chạy hệ điều hành Windows XP, Vista, Windows7 3.3.3 Xây dựng, phát triển chương trình Luận văn sử dụng phương pháp dùng ma trận kề để biểu diễn đồ thị máy tính Chương trình gồm lớp Form hiển thị kết thu Ngồi chương trình sử dụng số class, phương thức nhằm bổ trợ cho việc thể thuật toán Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 48 3.3.3.1 Lớp MyFile.class Trong lớp Myfile.class ta sử dụng phương thức public static int[][] readFile(String filename) để đọc ma trận kề phương thức public static void saveFile(String filename, int[][] matran) để lưu ma trận vào máy tính 3.3.3.2 Lớp MaTran.class Trên lớp Matran.class thực chức như: Tính bậc đỉnh, xếp bậc đỉnh theo chiều giảm dần, kiểm tra tính liên thơng đồ thị, kiểm tra đồ thị có phải đồ thị 2-liên thơng Để duyệt đồ thị, chương trình sử dụng thuật toán duyệt theo chiều sâu (DFS) 3.3.3.3 Lớp DoThi.class Trên lớp Dothi.class chủ yếu thực chức kiểm tra đồ thị có phải đồ thị đầy đủ khơng? Kiểm tra xem đồ thị có thuộc lớp đồ thị đặc biệt K (K1, K2, K3, K4, K5) hay không Phương thức isDominating nhằm đưa kết luận xem đồ thị có thuộc lớp đồ thị đặc biệt K, hay có chu trình trội hay khơng Sau đoạn chương trình kiểm tra đồ thị có thuộc lớp K1 hay khơng (các lớp cịn lại tương tự) public static bool kiemTraK1(MaTran m) { int[] fix = new int[m.nMaTran]; int r = m.dsDinh[m.nMaTran - 1].bac; //Bước 1: kiểm tra |V|=3r if (m.nMaTran != * r) return false; // Bước 2: chọn đỉnh u, v có bậc lớn kiểm tra deg(u)=deg(v)

Ngày đăng: 28/12/2014, 06:55

Từ khóa liên quan

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

Tài liệu liên quan