tailieunhanh - Bài giảng Phân tích và thiết kế giải thuật: Chương 6 - PGS.TS. Dương Tuấn Anh

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. Trong chương này chúng ta sẽ cùng tìm hiểu một số kiến thức liên quan tới giải thuật quay lui và giải thuật nhánh và cận. để nắm bắt các nội dung chi tiết. | Chương 6 Giải thuật quay lui Giải thuật quay lui Giải thuật nhánh-và-cận Giải thuật quay lui Một phương pháp tổng quát để giải quyết vấn đề: thiết kế giải thuật tìm lời giải cho bài tóan không phải là bám theo một tập qui luật tính tóan được xác định mà là bằng cách thử và sửa sai (trial and error). Khuôn mẫu thông thường là phân rã quá trình thử và sửa sai thành những công tác bộ phận. Thường thì những công tác bộ phận này được diễn tả theo lối đệ quy một cách thuận tiện và bao gồm việc thăm dò một số hữu hạn những công tác con. Ta có thể coi toàn bộ quá trình này như là một quá trình tìm kiếm (search process) mà dần dần cấu tạo và duyệt qua một cây các công tác con. Cho một bàn cờ n n với n2 ô. Một con hiệp sĩ – được di chuyển tuân theo luật chơi cờ vua – được đặt trên bàn cở tại ô đầu tiên có tọa độ x0, y0. Vấn đề là tìm một lộ trình gồm n2 –1 bước sao cho phủ toàn bộ bàn cờ (mỗi ô được viếng đúng một lần). Cách rõ ràng để thu giảm bài toán phủ n2 ô là xét bài toán, hoặc là - thực hiện bước đi kế tiếp, hay - phát hiện rằng không kiếm được bước đi hợp lệ nào. Bài toán đường đi của con hiệp sĩ (The Knight’s Tour Problem) procedure try next move; begin initialize selection of moves; repeat select next candidate from list of next moves; if acceptable then begin record move; if board not full then begin try next move; () if not successful then erase previous recording end end until (move was successful) (no more candidates) end Chúng ta diễn tả bàn cờ bằng một ma trận h. type index = 1n ; var h: array[index, index] of integer; h[x, y] = 0: ô chưa hề được viếng h[x, y] = i: ô đã được viếng tại bước chuyển thứ i (1 i n2) Điều kiện “board not full” có thể được diễn tả bằng “i procedure try(i: integer; x,y : index; var q: boolean); var u, v: integer; q1 : boolean; begin initialize selection . | Chương 6 Giải thuật quay lui Giải thuật quay lui Giải thuật nhánh-và-cận Giải thuật quay lui Một phương pháp tổng quát để giải quyết vấn đề: thiết kế giải thuật tìm lời giải cho bài tóan không phải là bám theo một tập qui luật tính tóan được xác định mà là bằng cách thử và sửa sai (trial and error). Khuôn mẫu thông thường là phân rã quá trình thử và sửa sai thành những công tác bộ phận. Thường thì những công tác bộ phận này được diễn tả theo lối đệ quy một cách thuận tiện và bao gồm việc thăm dò một số hữu hạn những công tác con. Ta có thể coi toàn bộ quá trình này như là một quá trình tìm kiếm (search process) mà dần dần cấu tạo và duyệt qua một cây các công tác con. Cho một bàn cờ n n với n2 ô. Một con hiệp sĩ – được di chuyển tuân theo luật chơi cờ vua – được đặt trên bàn cở tại ô đầu tiên có tọa độ x0, y0. Vấn đề là tìm một lộ trình gồm n2 –1 bước sao cho phủ toàn bộ bàn cờ (mỗi ô được viếng đúng một lần). Cách rõ ràng để thu giảm bài toán phủ n2 ô là xét bài toán, hoặc

TỪ KHÓA LIÊN QUAN