Bàn cờ hình vuông được chia làm 9x9 ô vuông nhỏ, trong đó có một số ô vuông được đánh số từ 1→9 trước. Có thể điền tiếp các số từ 1→9 vào các ô còn lại sao cho: hàng ngang, hàng dọc và các khối vuông 3x3 của bàn cờ là khác nhau từ 1→9?
Trang 1(THUẬT TOÁN QUAY LUI)
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Trang 2Mục lục
1. Exhaustive search (Tìm kiếm vét cạn)
2 Backtracking (Quay lui)
3. Branch and Bound (Thuật toán nhánh và cận)
Trang 3Bài toán Sudoku
Bàn cờ hình vuông được chia làm 9x9 ô
vuông nhỏ, trong đó có một số ô vuông được đánh số từ 1→9 trước Có thể điền tiếp các số
từ 1→9 vào các ô còn lại sao cho: hàng
ngang, hàng dọc và các khối vuông 3x3 của bàn cờ là khác nhau từ 1→9?
Trang 4Bài toán xếp hậu
•Có hay không một cách đặt N con hậu vào bàn cờ NxN (N ≥ 4) sao cho chúng không tấn công nhau?
Trang 5• Các thuật toán được thiết kế bằng tìm
kiếm vét cạn thường được gọi là
brute-force algorithms.
• Ý tưởng: sinh-kiểm, tức là sinh ra tất
cả các khả năng có thể có và kiểm tra mỗi khả năng xem nó có thoả mãn các điều kiện của bài toán không
• Ưu điểm: luôn đảm bảo tìm ra nghiệm chính xác
• Nhược điểm: thời gian thực thi lâu,
độ phức tạp lớn
=> vét cạn thường chỉ phù hợp với các bài toán có kích thước nhỏ
Trang 7Ứng dụng
Sản xuất tất cả các hoán vị của một tập các
giá trị. Liệt kê tất cả các tên, mật khẩu,…
Trang 82 Backtracking
• Quay lui (backtracking): là một
chiến lược tìm kiếm lời giải cho các bài toán thỏa mãn ràng buộc.
• Ưu điểm của quay lui so với tìm kiếm vét cạn: hạn chế các khả năng cần xem xét.
Trang 9Bản chất
Bản chất của thuật toán quay lui là một quá trình tìm kiếm theo chiều
sâu (Depth-First-Search)
Trang 10• Gọi dãy các trạng thái (a1,a2,
…,an) thỏa mãn các yêu cầu của bài toán là vector nghiệm.
• Ý tưởng của quay lui: xây dựng vector nghiệm xuất phát từ
vector rỗng, mỗi bước bổ sung thêm một thành phần vector nghiệm, lần lượt a1,a2,
Trang 11Bài toán
chính là A1
• Bước 1: chọn a1 S ∈ 1, ta có vector (a1).
• Bước i-1: tìm được vector (a1,a2, ,ai-1) là nghiệm một phần.
• Bước i: mở rộng nghiệm một phần: xác định tập Si các ứng cử viên cho thành phần thứ i của vector nghiệm Khi đó Si là tập con của tập Ai các trạng thái Có 2 khả năng:
Trang 12Bài toán
• Nếu Si , chọn a∉ ∅ i S∈ i và nghiệm một phần (a1, a2, , ai – 1 , ai) và loại ai
mở rộng
• Nếu Si , quay lại chọn phần tử a’∈ ∅ i – 1 trong Si – 1 làm thành phần thứ i-1 của vector nghiệm Nếu thành công (Si – 1 không rỗng), được vector (a1, a2, , ai – 2, a’ i – 1), tiếp tục mở rộng nghiệm một phần Khi quay lui để chọn a’1 mà S1 rỗng thì thuật toán dừng
Lưu ý: trong khi mở rộng nghiệm một phần, kiểm tra xem nó có là
nghiệm không Nếu là nghiệm thì ghi lại hoặc in ra.
Trang 13Cài đặt
Quay lui đệ quy Quay lui không đệ quy
Trang 15Bài toán sudoku
Áp dụng quay lui để giải bài toán sudoku
Ý tưởng: Mỗi bước tìm tập các giá trị khả dĩ để điền vào ô trống, và sau đó đệ quy để điền ô tiếp theo
Trang 16Bài toán sudoku
Trang 17Bài toán xếp hậu
Trang 18Ứng dụng • Games: 8 queens, sudoku,…• Bài toán tìm đường đi trong mê cung
• Tìm chu trình Hamilton của đồ thị
• Bài toán tô màu bản đồ
Trang 193 Branch and bound
(thuật toán nhánh và cận)
• Thuật toán nhánh cận trong quay lui:
• Là một kỹ thuật đánh giá việc tiếp tục đào sâu có tạo ra nghiệm tốt hơn
nghiệm tốt nhất mà ta lưu trữ hay không
• Nhờ có nhánh cận mà ta có thể đưa ra quyết định sớm hơn thuật toán quay lui
• Ý Tưởng: Ta sẽ thực hiện việc đánh giá theo từng bước, nếu không có
khả năng tìm thấy kết quả tốt hơn thì sẽ cắt bỏ nhánh đó, không thực hiện tìm tiếp và sẽ chuyển ngay sang nhánh khác Khi đó, chỉ ghi
nhận kết quả tốt hơn lúc ban đầu.
Trang 20Thuật giải
• Bài toán: giả sử (a1, a2, an) (ai (i=1,2, n)) được chọn ra từ tập Si các ứng viên) là nghiệm của bài toán và có một giá cost(a1, ,an) ≥ 0 Tìm nghiệm có giá thấp nhất (nghiệm tối ưu) Giả sử giá của các nghiệm một phần là không giảm.
• Bài giải:
(a1, ,ak,ak+1, ) là mở rộng của nghiệm một phần (a1, ,ak )
• B2: trong quá trình tìm kiếm, giá của nghiệm tốt nhất là lowcost
• B3: khi đạt tới nghiệm một phần (a1, ,ak ) mà cost*(a1, ,ak ) > lowcost thì cắt
Trang 21Cài đặt
Trang 23Ưu điểm
• Không cần phải xem xét tất cả các nghiệm vẫn có thể tìm được nghiệm tối đa
Trang 24Đóng góp của các thành viên
Nguyễn Thị Hường Viết code, tìm hiểu nội dung và ảnh minh hoạ cho slide
Trần Quang Việt Viết code, tìm hiểu nội dung và các ví dụ, bài toán của thuật toán cho slide
Lý Hoàng Anh Viết code, tìm hiểu nội dung và chỉnh sửa giao diện cho slide.Người thuyết trình
Trang 25THANK YOU FOR
WATCHING