ĐỆ QUY QUAY LUI DỄ HIỂU NHẤT. Có tài liệu còn gọi nó là ” Thử và sai”. đã là đệ quy quay lui thì trong thủ tục của nó là thủ tục đệ quy và có “quay lui”. Ta tìm hiểu quay lui ở đâu và như thế nào? Trước hết ta xét ví dụ: Một từ được gọi là chân chính loại M, N nếu nó được xây dựng từ tập hợp gồm M ký tự, có độ dài N và không có 2 từ con nào liên tiếp giống nhau. Giả sử tập M={‘1’, ‘2’, ‘3’} Ví dụ: 1232; 2123; 1231 là những từ chân chính loại 3,4; còn 1123;1212;1233 là những từ không phải là từ chân chính loại 3,4. Tất nhiên ở đây không phải là ta xây dựng tất cả các từ có độ dài N, sau đó loại trừ những từ không thoả mãn, mà ta lần lượt xây dựng các xâu. Khởi tạo ban đầu là xâu rỗng, ta tiến hành ghép các ký tự , tại mỗi bước ghép ta kiểm tra xem nó có thoả mãn điều kiện bài toán không( có hai từ con liền nhau giống nhau không). Nếu thoả mãn ta kiểm tra xem xâu có độ dài bằng N hay chưa. Nếu xâu đã có độ dài bằng N ta in kết quả, nếu chưa có độ dài bằng N ta ghép bước tiếp. Nếu tất cả các ký tự được chọn để ghép đều không thoả mãn điều kiện bài toán thì việc chọn ký tự trước đó sai, ta phải xoá ký tự trước đó đi và thay bởi ký tự khác để bước ghép tiếp được thành công. Việc xoá ký tự trước đó để tìm ký tự khác ghép vào người ta gọi là quay lui. Trong trường hợp xâu có độ dài bằng N( đã thoả mãn bài toán) thì ta được một kết quả. Để tìm kết quả khác, ta xoá ký tự cuối cùng này đi rồi tìm ký tự khác để ghép vào cũng gọi là quay lui.
THUẬT TỐN QUAY LUI BACKTRACKING I/ Giới thiệu: Thuật tốn quay lui dùng để giải toán liệt kê cấu hình Mỗi cấu hình xây dựng cách xây dựng phần tử, phần tử chọn cách thử tất khả Giả sử cấu hình cần liệt kê có dạng x[1 n], thuật tốn quay lui thực qua bước: 1) Xét tất giá trị x[1] nhận, thử cho x[1] nhận giá trị Với giá trị thử gán cho x[1] ta sẽ: 2) Xét tất giá trị x[2] nhận, lại thử cho x[2] nhận giá trị Với giá trị thử gán cho x[2] lại xét tiếp khả chọn x[3] … tiếp tục đến bước: … n) Xét tất giá trị x[n] nhận, thử cho x[n] nhận giá trị đó, thơng báo cấu hình tìm Trên phương diện quy nạp, nói thuật tốn quay lui liệt kê cấu hình n phần tử dạng x[1 n] cách thử cho x[1] nhận giá trị Với giá trị thử gán cho x[1] toán trở thành liệt kê tiếp cấu hình n - phần tử x[2 n] II/ Mơ hình thuật tốn quay lui mô tả sau: procedure Try(i: Integer); begin for begin ; if then else begin ; Try(i + 1); {Gọi đệ quy để chọn tiếp x[i+1]} ; end; end; end; Thuật toán quay lui bắt đầu lời gọi Try(1) III/ Một số ví dụ: 1/ Viết chương trình in tất hốn vị n số tự nhiên (0