Bài giảng gồm các bài tập minh họa cho phương pháp Quay lui bài toán 8 hậu, bài toán ngựa đi tuần và trò chơi Sudoku. Tài liệu hữu ích dành cho các bạn sinh viên ngành Công nghệ thông tin để các bạn bổ trợ thêm kiến thức lập trình của mình. Mời các bạn cùng tham khảo.
2/2/2017 Analysis and Design of Algorithms Lecture 11,12 Backtracking Method Lecturer: Ha Dai Duong duonghd@mta.edu.vn 2/2/2017 Nội dung Lược đồ chung Bài toán hậu Bài toán ngựa tuần Trò chơi Sudoku Liệt kê dãy nhị phân độ dài N Liệt kê hoán vị Duyệt đồ thị 2/2/2017 Nội dung Lược đồ chung Bài toán hậu Bài toán ngựa tuần Trò chơi Sudoku Liệt kê dãy nhị phân độ dài N Liệt kê hoán vị Duyệt đồ thị 2/2/2017 2/2/2017 Giới thiệu • Phương pháp quay lui dùng để giải toán mà lời giải X tập phần tử x1, x2, , xn • Ví dụ: Bài toán hậu, Mã tuần … 2/2/2017 Ý tưởng • Ý tưởng phương pháp quay lui bước hướng tới lời giải cuối toán dựa việc Thử-và-Sai • Tại bước: – Nếu có lựa chọn chấp nhận ghi nhận lại lựa chọn và tiến hành bước thử tiếp theo; – Nếu tất lựa chọn không chấp nhận trở lại bước trước, xóa bỏ ghi nhận ứng viên chọn lựa ứng viên 2/2/2017 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 2/2/2017 2/2/2017 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 2/2/2017 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 2/2/2017 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 2/2/2017 14 11 13 10 12 2/2/2017 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 14 11 13 10 12 2/2/2017 10 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 11 13 10 12 2/2/2017 11 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 10 2/2/2017 11 12 12 2/2/2017 Ví dụ • Mã tuần bàn cờ x (bắt đầu từ Ô(1,1) 10 11 12 2/2/2017 13 Quay lui • Khi quay lui điểm quan trọng thuật toán phải ghi nhớ bước để tránh trùng lặp quay lui • Dễ thấy cấu trúc ngăn xếp phù hợp để lưu trữ thông cần ghi nhớ đề cập • Đệ qui kỹ thuật thường sử dụng phương pháp quay lui 2/2/2017 14 Lược đồ chung • Lời giải toán mô tả dạng vector n chiều x = (x1, x2, , xn) thỏa mãn điều kiện • Giả sử xây dựng i-1 thành phần (x1, x2, , xi-1), cần xác định thành phần thứ i: – Nếu khả k phù hợp -> lấy xi=k, ghi nhận trạng thái dùng k Nếu i=n -> có lời giải – Nếu khả cho x i quay lui chọn lại xi-1 2/2/2017 15 2/2/2017 Lược đồ chung … 2/2/2017 16 Nội dung Lược đồ chung Bài toán hậu Bài toán ngựa tuần Trò chơi Sudoku Liệt kê dãy nhị phân độ dài N Liệt kê hoán vị Duyệt đồ thị 2/2/2017 17 Bài toán • Hãy tìm cách xếp hậu bàn cờ vua cho không ăn • Ví dụ: Đây PA 2/2/2017 18 2/2/2017 Ý tưởng thuật toán Ý tưởng (Thử Sai) toán hậu Lần lượt xếp hậu vào bàn cờ Giả sử xếp i hậu (từ đến i) Xếp hậu thứ i+1 a Nếu tìm ô hợp lệ (không bị hậu trước ăn) -> xếp hậu thứ i+1 vào vị trí vừa tìm thấy Lặp lại bước b Nếu không tìm ô hợp lệ -> tìm vị trí phù hợp khác để đặt lại hậu thứ i 2/2/2017 19 Phương án (nghiệm) toán • Nhận xét: Mỗi hậu phải nằm hàng • Dùng mảng x[1 8] để thể phương án toán: – Chỉ số mảng i: dòng chứa hậu thứ i (chỉ số dòng cố định) – Giá trị x[i] (i=1 8): cột đặt hậu thứ i • Bài toán xếp hậu trở thành: Lần lượt xác định giá trị thành phần x[i], i=1 2/2/2017 20 Ví dụ • Phương án nghiệm x[1]=4 x[2]=7 x[3]=3 x[4]=8 x[5]=2 x[6]=5 x[7]=1 x[8]=6 2/2/2017 21 2/2/2017 Ứng viên • Tại bước i – Cần xác định giá trị k , số cột, cho x[i], k={1, ,8} – Nếu ứng viên chọn j, nghĩa x[i]=j, cần “đánh dấu” cột j chọn để bước sau không chọn lại • Tổ chức mảng a[j], j=1 8, để ghi nhận cột j chọn hay chưa, a[j]=1 cột j chưa chọn a[j]=0 cột j chọn 2/2/2017 22 Tính hợp lệ • Hậu dòng i, đặt vào cột j i-1 hẫu đặt trước không “ăn” hậu vị trí [i,j] (dòng i, cột j) i+j=2 i+j=7 • Trên đường chéo đỏ: – Giá trị i+j số – Có giá trị từ đến 16 i-j=7 • Trên đường chéo xanh – Giá trị i-j số – Có giá trị từ -7 đến i+j=16 i-j=-7 2/2/2017 i-j=-1 23 Tính hợp lệ … • Mảng b[k], k=2 16, b[k]=1, đặt đường chéo thuận k • Mảng c[k], k=-7 7, c[k]=1, đặt đường chéo nghịch k i+j=2 i+j=7 i-j=7 i+j=16 i-j=-7 i-j=-1 24 2/2/2017 2/2/2017 Tính hợp lệ … • Như hậu i (dòng i) đặt vào cột j nếu: b[i+j] = c[i-j] = 2/2/2017 25 Cài đặt Cài đặt Khởi tạo 2/2/2017 26 Minh họa • Một lời giải toán với N=8 H H H H H H H H 2/2/2017 27 2/2/2017 Kết • Độ phức tạp thuật toán: T(n) = ??? • Viết hàm Xuat(x): in phương án lựa chọn hình • Code, chạy thử trình bày kết 2/2/2017 28 Nội dung Lược đồ chung Bài toán hậu Bài toán ngựa tuần Trò chơi Sudoku Liệt kê dãy nhị phân độ dài N Liệt kê hoán vị Duyệt đồ thị 2/2/2017 29 Bài toán • Trên bàn cờ vua, mã vị trí (x0, y0) • Hãy hành trình để mã qua tất ô, ô lần • Ví dụ: Đây PA bàn cờ 8x8 mã ô (1,1) 2/2/2017 30 10 2/2/2017 Ý tưởng thuật toán Ý tưởng (Thử Sai) toán mã tuần Đặt ngựa vị trí (x0,y0) di chuyển ngựa theo luật cờ vua Giả sử i-1 bước Xét nước thứ i a Nếu tìm nước hợp lệ (và ngựa chưa qua lần nào) -> xếp nước thứ i ngựa vào vị trí vừa tìm thấy Lặp lại bước b Nếu không tìm ô hợp lệ -> tìm vị trí phù hợp khác để đặt lại bước thứ i-1 ngựa 31 2/2/2017 Phương án nghiệm • Dùng mảng chiều h[x,y] (x=1 N, y=1 N) với qui ước: h[x,y] = ô (x,y) chưa có ngựa qua h[x,y] = k ngựa qua ô (x,y) nước thứ k • Bài toán trở thành: Xác định giá trị mảng h nước mã hành trình qua tất ô (x0,y0) Khi NxN ô qua ta có phương án (nghiệm) thể cách mã 2/2/2017 32 Ví dụ • Một phương án để mã tuần bàn cờ 5x5 ô (1,1) 2/2/2017 33 11 2/2/2017 Ứng viên Y yi • Tại bước i – Vị trí mã đứng (xi,yi) – Theo luật cờ vua mã có xi thể di chuyển tới nhiều ô (hình bên) – Tọa độ vị trí so với vị trí X (xi,yi) là: (xi+1,yi+2), (xi+2,yi+1), (xi+2,yi-1), (xi+1,yi-2) (xi-1,yi-2), (xi-2,yi-1), (xi-2,yi+1), (xi-1,yi+2) 2/2/2017 34 Ứng viên Y yi • Tại bước i – Dùng mảng a[1 8] mô tả sai khác tọa độ X so với xi, xi theo ta có: a=(1,2,2,1,-1,-2,-2,-1) – Dùng mảng b[1 8] mô tả sai khác tọa độ Y so với yi, theo ta có: b=(2,1,-1,-2,-2,-1,1,2) X 2/2/2017 35 Tính hợp lệ Y yi • Tại bước i – Vậy ứng viên bước i+1 xác định tọa độ (xi+a[k],yi+b[k]) với k=1 • Tính hợp lệ: xi – Ứng viên tọa độ X (xi+a[k],yi+b[k]) với k=1 chấp nhận h[xi+a[k],yi+b[k]] = – Ngoài (xi+a[k],yi+b[k]) phải nằm bàn cờ 2/2/2017 36 12 2/2/2017 Cài đặt Cài đặt 2/2/2017 37 Minh họa • Với N=5, mã xuất phát (1,1) 2/2/2017 38 Minh họa • Với N=6, mã xuất phát (2,3) 2/2/2017 39 13 2/2/2017 Kết • Độ phức tạp thuật toán: T(n) = ??? • Viết hàm Xuat_h(x): in phương án lựa chọn hình • Code, chạy thử trình bày kết • Lưu ý: Tùy vào kích thước bàn cờ, toán có lời giải số vị trí bắt đầu (x0,y0) định 2/2/2017 40 Nội dung Lược đồ chung Bài toán hậu Bài toán ngựa tuần Trò chơi Sudoku Liệt kê dãy nhị phân độ dài N Liệt kê hoán vị Duyệt đồ thị 2/2/2017 41 Bài toán • Trò chơi: Cho hình vuông chia thành 9x9 ô, số ô có sẵn số từ đến • Hãy đặt số từ 1-9 vào ô trống cho: hàng, cột, vùng 3x3 có đủ số từ 1-9 2/2/2017 42 14 2/2/2017 Ví dụ Ban đầu 2/2/2017 43 Ý tưởng thuật toán Ý tưởng (Thử Sai) toán Sudoku Cần xếp N ô trống Giả sử xếp đến ô thứ i Xét ô thứ i+1 a Nếu tìm giá trị thích hợp -> xếp giá trị vào ô thứ i+1 vừa tìm thấy Lặp lại bước b Nếu không tìm giá trị hợp lệ -> tìm giá trị phù hợp khác để đặt lại cho ô thứ i 2/2/2017 44 Phương án nghiệm • Dùng mảng chiều S[x,y] (x=1 9, y=1 9) để lưu giá trị số Sudoku: S[x,y] = ô (x,y) chưa xử lý S[x,y] = k (k=1 9) giá trị số Sudoku • Bài toán trở thành: Xác định giá trị mảng S số Sukodu Khi tất ô đặt ta có phương án (nghiệm) thể cách chơi Sukodu 2/2/2017 45 15 2/2/2017 Ứng viên • Ứng viên (giá trị) đặt cho ô có tọa độ (xi,yi) giá trị k: k {1, 2, 3, 4, 5, 6, 7, 8, 9} 2/2/2017 46 Tính hợp lệ • Ứng viên k đặt vào ô (xi,yi) – Trên hàng xi chưa có giá trị k – Trên cột yj chưa có giá trị k – Vùng 3x3 chứa (xi,yi) chưa có giá trị k 2/2/2017 47 Cài đặt • Tính hợp lệ, hàm 2/2/2017 48 16 2/2/2017 2/2/2017 49 Minh họa 2/2/2017 50 Minh họa … 2/2/2017 51 17 2/2/2017 Minh họa … 2/2/2017 52 Minh họa … 2/2/2017 53 Bài tập Thực việc đặt hậu bàn cờ, thể kết bước Thực nước ngựa bàn cờ 5x5 ô (1,2) thể kết bước 2/2/2017 54 18 2/2/2017 Bài tập Chơi trò sudoku (theo thuật toán) với số cho sau: 2/2/2017 55 Bài tập Hoàn thiện cài đặt toán hậu Hoàn thiện cài đặt toán mã tuần Hoàn thiện cài đặt trò chơi Sukodu Sử dụng phương pháp quay lui đề xuất giải thuật đánh cờ caro (tự động) cho máy tính Giải toán túi theo giải thuật quay lui 2/2/2017 56 19 ... (xi+2,yi-1), (xi+1,yi-2) (xi-1,yi-2), (xi-2,yi-1), (xi-2,yi+1), (xi-1,yi+2) 2/2/2017 34 Ứng viên Y yi • Tại bước i – Dùng mảng a[1 8] mô tả sai khác tọa độ X so với xi, xi theo ta có: a=(1,2,2,1 ,-1 ,-2 ,-2 ,-1 )... từ -7 đến i+j=16 i-j =-7 2/2/2017 i-j =-1 23 Tính hợp lệ … • Mảng b[k], k=2 16, b[k]=1, đặt đường chéo thuận k • Mảng c[k], k =-7 7, c[k]=1, đặt đường chéo nghịch k i+j=2 i+j=7 i-j=7 i+j=16 i-j =-7 ... dùng để giải toán mà lời giải X tập phần tử x1, x2, , xn • Ví dụ: Bài toán hậu, Mã tuần … 2/2/2017 Ý tưởng • Ý tưởng phương pháp quay lui bước hướng tới lời giải cuối toán dựa việc Thử-và-Sai •