Thuật toán quay lui đơn giản (Simple Backtracking)

Một phần của tài liệu Luận văn thạc sĩ khoa học công nghệ ngành công nghệ thông tin (Trang 31)

Thuật toán cơ bản để tìm kiếm nghiệm là thuật toán quay lui đơn giản, nó chính là một chiến lược tìm kiếm tổng quát và được dùng rộng rãi trong việc giải các bài toán (Prolog dùng nó để trả lời các câu hỏi). Trong một trường hợp cụ thể của CSPs, thao tác cơ bản là chọn một biến tại một thời điểm và xét một giá trị cho nó, đảm bảo rằng nhãn được chọn đó sẽ phù hợp với tất cả các nhãn trong tương lai. Việc gán một giá trị vào một biến gọi là labelling. Nếu labelling biến hiện tại với giá trị được chọn không phù hợp với một ràng buộc nào đó, thì một giá trị khác có sẵn sẽ được chọn. Nếu tất cả các biến được gán nhãn, khi đó bài toán được giải.

Bởi vì thuật toán quay lui (Backtracking- BT) luôn luôn quay lui tại điểm quyết định cuối cùng khi quá trình kết thúc, nên nó cũng được gọi là quay lui theo một trình tự (chronological backtracking). Chúng ta có đoạn mã sau:

31

Nếu số biến là n, số ràng buộc là e, số miền là a cho mỗi biến trong CSP. Khi đó có thể có an khả năng cho bộ nghiệm, và độ phức tạp thời gian cho việc kiểm tra toàn bộ ràng buộc là O(ane).

Độ phức tạp bộ nhớ của bài toán là O(na). Thuật toán BT không đòi hỏi bộ nhớ tạm thời nhiều hơn O(n) để lưu trữ nhãn kết hợp. Vì vậy, độ phức tạp không gian lưu trữ cho Chronological_Backtracking là O(na).

Chú ý rằng độ phức tạp thời gian ở trên chỉ ra rằng thuật toán sẽ hiệu quả hơn nếu ta giảm được a. Điều này có thể đạt được bằng các kỹ thuật rút gọn bài toán. Chúng ta sẽ thảo luận ở phần sau.

32

Một phần của tài liệu Luận văn thạc sĩ khoa học công nghệ ngành công nghệ thông tin (Trang 31)

Tải bản đầy đủ (PDF)

(120 trang)