Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
571,3 KB
Nội dung
ĐệQuyQuayLuiNhánhCận Trainer: Thien Nguyen 16/09/2012 Tổng quan Đệquy (Recursion ) QuayLui (Backtracking) NhánhCận (Branch-and-Bound) ĐệquyĐệquy gì? Cấu trúc Chương trình đệquyĐệquyĐệquy gì? Một khái niệm X định nghĩa theo đệquy định nghĩa X có sử dụng khái niệm X VD: + Bố mẹ tổ tiên Bố mẹ tổ tiên tổ tiên Đệquy Cấu trúc: Một khái niệm đệ qui gồm hai phần + Phần sở: Định nghĩa với trường hợp đơn giản nhất, không gọi lại + Phần đệ qui: Định nghĩa trường hợp lại, gọi lại khái niệm định nghĩa Đệquy Cấu trúc: VD: + số tự nhiên + n số tự nhiên n-1 số tự nhiên Đệquy Chương trình đệ quy: Một chương trình đệ qui gồm hai phần + Phần sở: thực thao tác với đối số khơng gọi lại + Phần đệ qui: thực câu lệnh mà có lần gọi lại với đối số đơn giản Đệquy Chương trình đệ quy: VD: int giaithua(int n) { if (n == 0) return 1; else return n * giaithua(n-1); } Quay Lui: Khái niệm Bản Chất Phương pháp Mã giả Quay Lui: Khái niệm: Quaylui (tiếng Anh: backtracking) chiến lược tìm kiếm lời giải cho toán thỏa mãn ràng buộc Người đề thuật ngữ (backtrack) nhà toán họcngười Mỹ D H Lehmer vào năm 1950 -Wikipedia- 10 Quay Lui: Khái niệm: Quaylui chiến lược tìm kiếm lời giải cho tốn mà nghiệm hay tập cấu hình thỏa mãn đồng thời tính chất P Q + P: Cách xác định cấu hình + Q: Tính dừng tốn Cấu hình tập v = (v1, v2, …, vn), với vi thuộc tập D cho trước 11 Quay Lui: Khái niệm: VD: Liệt kê tất hoán vị tập gồm n số tự nguyên dương theo thứ tự từ điển N = 3: 123, 132, 213, 231, 312, 321 12 Quay Lui: Bản chất: Bản chất Quaylui trình tìm kiếm theo chiều sâu (Depth-First Search) 13 Quay Lui: Phương pháp: Giả sử v = (v1, v2, …, vn) cấu hình cần tìm, tìm k-1 phần tử v v1, v2, …, vk-1 Ta tìm phần tử thứ k cách duyệt hết tất khả 𝑖 ∈ 𝐷 vk, với khả i kiểm tra xem chấp nhận khơng (thỏa mãn P) Có khả năng: 14 Quay Lui: Phương pháp (t.t): … Kiểm tra vk thỏa P Có khả năng: + Nếu vk thỏa P, kiểm tra Q Nếu thỏa Q (đk dừng) ta dừng tìm kiếm xuất kết Ngược lại tiếp tục tìm vk+1 + Nếu ∄𝑖 ∈ 𝐷 cho vk+1 = i thỏa P (ngõ cụt), ta quay lại bước xác định vk-1 15 Quay Lui: Mã giả: Try(k){ For ([mỗi phương án chọn 𝑖 ∈ 𝐷 ]) If ([Chấp nhận i]){ [Chọn i cho vk]; If ([Thành công]) [Thông báo kq]; else Try(k+1); [Hủy chọn i cho vk]; } } 16 Quaylui VD1: Liệt kê hoán vị số tự nhiên N Xây dựng khái niệm giải thuật Try(k): Tìm thành phần thứ k hoán vị Tập giá trị phần tử: D = {1,2,…,N} Chấp nhận i: Khi i chưa chọn trước Thực bước chọn: đánh dấu i chọn cho vk Thành công: chọn thành phần thứ k = N Thông báo kết quả: Hiển thị N số hoán vị Hủy chọn: đánh dấu i chưa chọn 17 Quaylui VD2: Liệt kê cách xếp N quân hậu lên bàn cờ NxN cho khơng có hai qn hậu ăn Xây dựng khái niệm giải thuật Try(k): Tìm vị trí dòng đặt qn hậu cột thứ k Phương án chọn: i = 1, …, N Chấp nhận i: Khi i chọn trước vào ô (i,j) không nằm đường chéo với chọn trước Thực bước chọn: đánh dấu i chọn cột, hàng, đường chéo chứa đặt qn hậu Thành cơng: chọn thành phần thứ k = N Thông báo kết quả: Hiển thị số dòng theo thứ tự cột tăng dần Hủy chọn: đánh dấu i chưa chọn 18 NhánhCậnNhánhCận gì? Phương Pháp Một số ví dụ Mã giả 19 NhánhCậnNhánhCận gì? NhánhcậnQuay lui: + kỹ thuật đánh giá việc tiếp tục đào sâu có tạo cấu hình tốt cấu hình tốt mà ta lưu trữ hay khơng + Nhờ có Nhánhcận mà ta đưa định quaylui sớm thuật toán backtracking cổ điển 20 NhánhCận Phương Pháp Từ thuật toán backtracking cổ điển, xác định điều kiện P (điều kiện xác định cấu hình đề cử), ta sử dụng thêm hàm đánh giá f(v1, v2,…, vk-1) để xác định việc tiếp có hy vọng tìm lời giải hay khơng 21 NhánhCận VD: Bài toán người giao hàng - Một người cần phải giao hàng N thành phố T1, T2, …, Tn - Cij: chi phí từ thành phố Ti đến thành phố Tj (i=1,2,…,N; j = 1,2,…,N) - Yêu cầu: xác định hành trình thỏa mãn + Đi qua tất thành phố, thành phố qua lần, quay trở lại thành phố xuất phát + Chi phí nhỏ 22 NhánhCận VD: Bài toán người giao hàng Nhánh cận: Lưu cấu hình BEST_CONFIG Đặt Cmin=Min{Cij: i,j={1, ,n}} Giả sử đoạn đường T1->T2->…->Ti với chi phí: Si=C1,x2+Cx2,x3+…+Cxi-1,xi Số thành phố chưa qua: (n-i+1) thành phố Như vậy, để tiếp ta tốn chi phí Cremain > Cmin * (n-i+1) Hàm cận: f(x1=1,…,xi) = Si+(n-i+1)Cmin 23 NhánhCận Mã giả Try(k){ For ([mỗi phương án chọn 𝑖 ∈ 𝐷 ]) If ([Chấp nhận i]){ [Chọn i cho vk]; if (Còn hy vọng tìm c.hình tốt BEST_CONFIG) { If ([Thành cơng]) [Thông báo kq]; else Try(k+1); [Hủy chọn i cho vk]; } } } 24 Cám ơn bạn ý lắng nghe Trainer: Thien Nguyen ... 132, 213, 231, 312, 321 12 Quay Lui: Bản chất: Bản chất Quay lui trình tìm kiếm theo chiều sâu (Depth-First Search) 13 Quay Lui: Phương pháp: Giả sử v = (v1, v2, …, vn) cấu hình cần tìm, tìm k-1