Đệ Quy Quay Lui Nhánh Cận

25 438 2
Đệ Quy Quay Lui Nhánh Cận

Đ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

Đệ Quy Quay Lui Nhánh Cận Trainer: Thien Nguyen 16/09/2012 Tổng quan Đệ quy (Recursion ) Quay Lui (Backtracking) Nhánh Cậ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: Quay lui (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: Quay lui 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 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 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 Quay lui 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 Quay lui 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ánh Cận Nhánh Cận gì? Phương Pháp Một số ví dụ Mã giả 19 Nhánh Cận Nhánh Cận gì? Nhánh cận Quay 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ánh cận mà ta đưa định quay lui sớm thuật toán backtracking cổ điển 20 Nhánh Cậ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ánh Cậ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ánh Cậ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ánh Cậ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

Ngày đăng: 05/02/2018, 20:37

Từ khóa liên quan

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

Tài liệu liên quan