Backtracking là gì
Quay lui là một kĩ thuật thiết kế giải thuật dựa trên đệ quy. Ý tưởng của quay lui là tìm lời giải từng bước, mỗi bước chọn một trong số các lựa chọn khả dĩ và đệ quy. Người đầu tiên đề ra thuật ngữ này (backtrack) là nhà toán học người Mỹ D. H. Lehmer vào những năm 1950.
Bạn đang xem: Backtracking là gì
Tư tưởng
Dùng để giải bài toán liệt kê các cấu hình. Mỗi cấu hình được xây dựng bằng từng phần tử. Mỗi phần tử lại được chọn bằng cách thử tất cả các khả năng.
Các bước trong việc liệt kê cấu hình dạng X<1...n>:
Xét tất cả các giá trị X<1> có thể nhận, thử X<1> nhận các giá trị đó. Với mỗi giá trị của X<1> ta sẽ:Xét tất cả giá trị X<2> có thể nhận, lại thử X<2> cho các giá trị đó. Với mỗi giá trị X<2> lại xét khả năng giá trị của X<3>...tiếp tục như vậy cho tới bước:.......Xét tất cả giá trị XBản chất của quay lui là một quá trình tìm kiếm theo chiều sâu(Depth-First Search).
Xem thêm: Fairy Tail Vs One Piece 2 - Game One Piece Đại Chiến Giang Hồ
Mô hình thuật toán
Mã giả cho thuật toán quay lui.Backtracking(k) {for( Á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. Giả mã của thuật toán (ở đây chú ý mảng chỉ có kích thước 9×9×9) void solveSudoku(int S<><9>, int x, int y){ if(y == 9){ if(x == 8){ printSolution(S); exit(0); } else { solveSudoku(S, x+1,0); } } else if(S Nhược điểm: Trong trường hợp xấu nhất độ phức tạp của quay lui vẫn là cấp số mũ. Vì nó mắc phải các nhược điểm sau:) {<Đưa ra kết quả>;} else {Backtracking(k+1);>;}}}} Ví dụ: Trò chơi Sudoku
Sudoku là một trò chơi khá phổ biến và chắc ai cũng biết. Trò chơi như sau: có một hình vuông được chia thành 9x9 ô vuông con. Mỗi ô vuông con có giá trị trong khoảng từ 1 đến 9. Ban đầu hình vuông có một số ô vuông con cho trước (có điền sẵn số) và còn lại là trống. Hãy điền các số từ 1-9 vào các ô con lại sao cho: hàng ngang là các số khác nhau từ 1 đến 9, hàng dọc là các số khác nhau từ 1 đến 9, và mỗi khối 3x3 chính là các số khác nhau từ 1 đến 9. Sau đây là 1 ví dụ về đề bài và lời giải:Nhận xét
-Ưu điểm: Việc quay lui là thử tất cả các tổ hợp để tìm được một lời giải. Thế mạnh của phương pháp này là nhiều cài đặt tránh được việc phải thử nhiều trường hợp chưa hoàn chỉnh, nhờ đó giảm thời gian chạy.
Xem thêm: Võ Lâm Truyền Kỳ 2 - Một Số Hỗ Trợ Sau Khi Phục Sinh Bạn Đồng Hành