Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
1,01 MB
Nội dung
Đề Tài: ĐƯỜNG ĐI HAMILTON VÀ ỨNG DỤNG Môn : Tốn Rời Rạc NHĨM THỰC HIỆN : Nguyễn Thế Công Phan Trọng Duy Hà Đức Hiến Phạm Trọng Hiếu Mục Lục I GIỚI THIỆU VỀ ĐỒ THỊ II ĐỒ THỊ HAMILTON A THUẬT TOÁN LIỆT KÊ CÁC CHU TRÌNH VÀ ĐƯỜNG ĐI HAMILTON B THUẬT TỐN NHÁNH CẬN VÀ BÀI TOÁN TSP III ỨNG DỤNG I GIỚI THIỆU VỀ ĐỒ THỊ Đồ thị - Cạnh – Đỉnh : a) Đồ thị vô hướng : G = (V,E) gồm tập V đỉnh tập E cạnh Mỗi cạnh e E liên kết với cặp đỉnh v, w ( không kể thứ tự) v w b) Đồ thị có hướng : G = (V,E) gồm tập V đỉnh tập E cạnh có hướng gọi cung Mỗi cạnh e E liên kết với cặp đỉnh v, w có thứ tự v w c) Đồ thị lót : Cho đồ thị có hướng G = (V,E) Nếu ta thay đổi cung G cạnh, đồ thị vơ hướng nhận gọi đồ thị lót G Ghi : Đồ thị vơ hướng xem đồ thị có hướng cạnh e = (v,w) tương ứng với hai cung (v,w) (w,v) I GIỚI THIỆU VỀ ĐỒ THỊ Khái niệm Bậc : a) Bậc : Cho đồ thị G = (V, E) • Bậc đỉnh v V tổng số cạnh liên thuộc với ký hiệu d(v) • Nếu đỉnh có khun khun tính tính bậc, vậy: d(v) :=Số cạnh liên thuộc + 2*Số khuyên Từ định nghĩa suy , đỉnh cô lập đồ thị đơn đỉnh có bậc • Số bậc lớn G ký hiệu • Số bậc nhỏ G gọi • Đỉnh treo đỉnh có bậc I GIỚI THIỆU VỀ ĐỒ THỊ Đường - chu trình : a) Đường : • Đường từ đỉnh v đến đỉnh w dãy từ đỉnh v đến đỉnh w, cá cạnh khơng lặp lại • Đường sơ cấp đường khơng qua đỉnh lần • Đường có hướng đồ thị có hướng dãy có hướng, cung khơng lặp lại • Đường có hướng sơ cấp đường có hướng không qua đỉnh lần b) Chu trình : • Chu trình đường có đỉnh đầu đỉnh cuối trùng • Chu trình sơ cấp chu trình khơng qua đỉnh q lần • Chu trình có hướng đường có hướng đỉnh đầu đỉnh cuối trùng • Chu trình có hướng sơ cấp chu trình có hướng khơng qua đỉnh qua lần • Định lý 1.2 : Đồ thị G lưỡng phân G khơng chứa chu trình độ dài lẻ I GIỚI THIỆU VỀ ĐỒ THỊ Đồ thị liên thơng : • Đồ thị vơ hướng gọi liên thơng, cặp đỉnh có đường nối chúng với • Đồ thị có hướng gọi liên thơng mạnh, cặp đỉnh có đường có hướng nối chúng với • Đồ thị có hướng gọi liên thơng yếu, đồ thị lót (vơ hướng) liên thơng II ĐỒ THỊ HAMILTON A THUẬT TỐN LIỆT KÊ CÁC CHU TRÌNH VÀ ĐƯỜNG ĐI HAMILTON 1.Định nghĩa Đường qua tất đỉnh đồ thị đỉnh lần gọi đường Hamilton Chu trình đỉnh v qua tất đỉnh lại đỉnh lần quay trở v gọi chu trình Hamilton Đồ thị G gọi đồ thị Hamilton chứa chu trình Hamilton gọi đồ thị Hamilton có đường Hamilton Rõ ràng đồ thị Hamilton nửa Hamilton, điều ngược lại khơng Ví dụ Trong hình 1: G3 Hamilton, G2 nửa Hamilton G1 khơng nửa Hamilton A THUẬT TỐN LIỆT KÊ CÁC CHU TRÌNH VÀ ĐƯỜNG ĐI HAMILTON 2.Định lý thuật toán liệt kê tất chu trình Hamilton a.Định lý (Dirak 1952) Đơn đồ thị vô hướng G với n>2 đỉnh, đỉnh có bậc khơng nhỏ n/2 đồ thị Hamilton b.Định lý Giả sử G đồ có hướng liên thông với n đỉnh Nếu deg+ (v) ≥ n/2, deg – (v) ≥ n/2, ∀ ∀v G Hamilton c Định lí i) Mọi đồ thị đấu loại nửa Hamilton ii) Mọi đồ thị đấu loại liên thơng mạnh Hamilton Ví dụ Đồ thị đấu loại D5, D6 cho hình 3.2 Hình Đồ thị đấu loại D , đấu loại liên thông mạnh D Thuật tốn liệt kê tất chu trình Hamilton Thuật tốn liệt kê tất chu trình Hamilton đồ thị Thuật toán sau xây dựng dựa sở thuật toán quay lui cho phép liệt kê tất chu trình Hamilton đồ thị Việc phân nhánh thực dựa qui tắc heuristic cho phép ta rút ngắn trình tìm kiếm phương án tối ưu Sau phân nhánh tính cận giá trị hàm mục tiêu tập Việc tìm kiếm tiếp tục tập có giá trị cận nhỏ Thủ tục tiếp tục ta nhận hành trình đầy đủ tức phương án cuả tốn Khi ta cần xét tập phương án có cận nhỏ giá trị hàm mục tiêu phương án tìm Quá trình phân nhánh tính cận tập phương án tốn thơng thường cho phép rút ngắn cách đáng kể trình tìm kiếm ta loại nhiều tập Thủ tục rút gọn Rõ ràng tổng chi phí hành trình người du lịch chứa phần tử dòng phần tử cột ma trận chi phí C Do đó, ta cộng hay trừ bớt phần tử dòng (hay cột) ma trận C số α độ dài tất hành trình giảm α hành trình tối ưu khơng bị thay đổi Vì vậy, ta tiến hành bớt phần tử dòng cột số cho ta thu ma trận gồm phần tử không âm mà dòng, cột có số 0, tổng số trừ cho ta cận hành trình Thủ tục bớt gọi thủ tục rút gọn, số trừ dòng (cột) gọi số rút gọn theo dòng(cột), ma trận thu được gọi ma trận rút gọn thủ tục sau cho phép rút gọn ma trận ma trận A kích thước k × k đồng thời Thủ tục rút gọn ma trận: float Reduce(float A[][max], int k) { sum = 0; for (i = 1; i≤k; i++){ r[i] = < phần tử nhỏ dòng i >; if (r[i] > 0) { ; sum = sum + r[i]; } } for (j = 1; j≤k; j++) { s[j]: = ; if (s[j] > 0) sum = sum + S[j]; } return(sum); } Tổng số rút gọn 81, cận cho tất hành trình 81 (khơng thể có hành trình có chi phí nhỏ 81) Bây ta xét cách phân tập phương án thành hai tập Giả sử ta chọn cạnh (6, 3) để phân nhánh Khi tập hành trình phân thành hai tập con, tập hành trình chứa cạnh (6,3), tập hành trình khơng chứa cạnh (6,3) Vì biết cạnh (6, 3) khơng tham gia vào hành trình nên ta cấm hành trình qua cạnh cách đặt C[6, 3] = ∞ Ma trận thu rút gọn cách bớt phần tử cột 48 (hàng giữ nguyên) Như ta thu cận hành trình không chứa cạnh (6,3) 81 + 48 = 129 Còn tập chứa cạnh (6, 3) ta phải loại dòng 6, cột khỏi ma trận tương ứng với nó, theo cạnh (6, 3) khơng thể từ sang bất sang nơi khác không phép đâu từ Kết nhận ma trận với bậc giảm Ngoài ra, theo cạnh (6, 3) nên không phép từ đến nữa, cần cấm theo cạnh (3, Cây tìm kiếm lúc có dạng hình Lúc tìm kiếm có dạng: Cận = 129 ∞ 27 30 ∞ 10 30 17 12 29 ∞ 12 12 32 83 10 ∞ 49 21 0 ∞ 85 ∞ 35 89 ∞ Cạnh (6,3) chọn để phân nhánh phân nhánh theo ta thu cận nhánh bên phải lớn so với việc phân nhánh theo cạnh khác Qui tắc áp dụng để phân nhánh đỉnh tìm kiếm Trong trình tìm kiếm theo nhánh bên trái trước Nhánh bên trái có ma trận rút gọn với bậc giảm Trong ma trận nhánh bên phải ta thay số ∞, rút gọn thêm ma trận tính lại số rút gọn theo dòng cột tương ứng với cạnh phân nhánh, kích thước ma trận giữ nguyên Do cạnh chọn để phân nhánh phải cạnh làm tăng cận nhánh bên phải lên nhiều nhất, nên để tìm ta chọn số khơng ma trận mà thay ∞ cho ta tổng số rút gọn theo dòng cột chứa lớn Thủ tục mơ tả sau để chọn cạnh phân nhánh (r, c) Thủ tục chọn cạnh phân nhánh Đầu vào: ma trận rút gọn A kích thước k x k Đầu ra: cạnh phân nhánh (r,c) tổng số rút gọn theo dòng r cột c beta void BestEdge(A, k, r, c, beta) { beta = -∞; for (i = 1; i≤k; i++) { for (j = 1; j≤k; j++) { if (A[i, j] == 0) { minr = < phần tửnhỏnhất dòng i khác với A[i, j]; minc = beta) { beta = total; r = i; /* Chỉsốdòng tốt nhất*/ c = j; /* Chỉsốcột tốt nhất*/ } } } } } Khi phân nhánh dựa vào cạnh (iu, iv) ta phải thêm cạnh vào danh sách cạnh node bên trái Nếu iu đỉnh cuối đường (i1, i2, , iu) jv đỉnh đầu đường (j1, j2, , jk) để ngăn ngừa khả tạo thành hành trình ta phải ngăn ngừa khả tạo thành hành hành trình ta phải cấm cạnh (jk, i1) Để tìm i1 ta ngược từ iu, để tìm jk ta xuôi từ j1 theo danh sách cạnh kết nạp vào hành trình Như thu hai hành trình tối ưu với chi phí 104 Ví dụ cho thấy tốn người du lịch có nhiều phương án tối ưu Trong ví dụ hành trình nhận tối ưu, nhiên điều mong đợi trường hợp tổng quát Trong ví dụ cần xét tới 13 node, tổng số hành trình người du lịch 120 Thuật toán nhánh cận giải toán người du lịch Các bước thuật tốn nhánh cận giải tốn người du lịch thể thủtục TSP Thủ tục TSP xét hành trình phận với Edges cạnh chọn tiến hành tìm kiếm Các biến sử dụng thủ tục là: Edges - Số cạnh hành trình phận; A - Ma trận chi phí tương ứng với kích thước (n-edges, n-edges) cost - Chi phí hành trình phận Mincost - Chi phí hành trình tốt tìm Hàm Reduce(A, k), BestEgde(A, k, r, c,beta) xây dựng void TSP(Edges, cost, A) { cost = cost + Reduce(A, n - Edges); if (cost < MinCost){ if (edges == n - 2){ ; MinCost: = Cost; } else { BestEdge(A, n - eges, r, c, beta); LowerBound = Cost + beta; ; NewA = < A loại bỏdòng r cột c>; TSP(edges + 1, cost, NewA);/*đi theo nhánh trái*/ ; if (LowerBound < MinCost){ /* theo nhánh phải*/ A[r, c] = ∞; TSP(edges, cost, A); A[r, c]: = 0; } } < Khôi phục ma trận A>;/* thêm lại sốrút gọn vào dòng cột tương ứng*/ } }/* end of TSP*/; III ỨNG DỤNG áp dụng giải tốn tìm chi phí ngắn nhất, ví dụ toán người du lịch(TSP) toán túi etc Thank for listen!! Bài làm nhiều sai sót mong bạn góp ý Nhóm em xin chân thành cảm ơn ... chứa chu trình Hamilton gọi đồ thị Hamilton có đường Hamilton Rõ ràng đồ thị Hamilton nửa Hamilton, đi u ngược lại khơng Ví dụ Trong hình 1: G3 Hamilton, G2 nửa Hamilton G1 khơng nửa Hamilton A... TRÌNH VÀ ĐƯỜNG ĐI HAMILTON 1.Định nghĩa Đường qua tất đỉnh đồ thị đỉnh lần gọi đường Hamilton Chu trình đỉnh v qua tất đỉnh lại đỉnh lần quay trở v gọi chu trình Hamilton Đồ thị G gọi đồ thị Hamilton. ..Mục Lục I GIỚI THIỆU VỀ ĐỒ THỊ II ĐỒ THỊ HAMILTON A THUẬT TỐN LIỆT KÊ CÁC CHU TRÌNH VÀ ĐƯỜNG ĐI HAMILTON B THUẬT TOÁN NHÁNH CẬN VÀ BÀI TOÁN TSP III ỨNG DỤNG I GIỚI THIỆU VỀ ĐỒ THỊ Đồ thị - Cạnh