BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NÂNG CAO ĐỀ TÀI: QUAY LUI VÀ SUDOK

25 12 0
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NÂNG CAO ĐỀ TÀI: QUAY LUI VÀ SUDOK

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Untitled TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NÂNG CAO ĐỀ TÀI QUAY LUI VÀ SUDOKU Sinh viên thực hiện NGUYỄN THẾ SINH GIÁP ANH TÀI[.]

lOMoARcPSD|15978022 TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NÂNG CAO ĐỀ TÀI: QUAY LUI VÀ SUDOKU Sinh viên thực : NGUYỄN THẾ SINH GIÁP ANH TÀI NGUYỄN HẢI NAM Giảng viên hướng dẫn : VŨ VĂN ĐỊNH Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : Lớp : Khóa : 2018 - 2023 Hà Nội, tháng 07 năm 2020 PHIẾU CHẤM ĐIỂM lOMoARcPSD|15978022 STT Họ tên sinh viên Nguyễn Thế Sinh Giáp Anh Tài Nguyễn Hải Nam Họ tên giảng viên Nội dung thực Chữ ký Điểm Chữ ký Ghi Giảng viên chấm 1: Giảng viên chấm 2: MỤC LỤC PHIẾU CHẤM ĐIỂM MỤC LỤC DANH MỤC HÌNH ẢNH LỜI MỞ ĐẦU NỘI DUNG THỰC HIỆN Chương Giới thiệu toán thực lOMoARcPSD|15978022 1.1 Giới thiệu toán sudoku .1 1.2 Giới thiệu kỹ thuật quay lui 1.2.1 Giải thích 1.2.2 Cài đặt 1.2.3 Heuristic 1.2.4 Tư tưởng thuật toán 1.2.5 Ví dụ 1.2.6 Phương pháp 1.2.7 Mô tả 1.3 Kết luận .7 1.3.1 Về toán sudoku 1.3.2 Về kỹ thuật quay lui Chương Phân tích tốn 2.1 Phân tích tốn 2.2 Giải thuật cho toán 2.2.1 Giải thuật cho toán .9 2.2.2 Tổ chức chương trình .9 2.2.3 Các hàm giải 10 2.3 Cấu trúc liệu sử dụng 10 Chương Cài đặt, đánh giá thử nghiệm 12 3.1 Giới thiệu chương trình 12 3.2 Các thành phần chương trình .13 3.2.1 Thành phần hiển thị nhập bảng sudoku 13 3.2.2 Bảng đếm số lượng chưa nhập 14 3.2.3 Nút giải 15 3.3 Một số hình ảnh chạy chương trình 15 3.4 Kết luận .18 KẾT LUẬN 19 DANH MỤC TÀI LIỆU THAM KHẢO 20 DANH MỤC HÌNH ẢNH Hình 1.1: Ví dụ sudoku .2 Hình 1.2: Ví dụ quay lui .6 Hình 2.1: Input Sudoku Hình 2.2: Output Sudoku Hình 3.1: Giao diện .12 lOMoARcPSD|15978022 Hình 3.2: Giao diện nhập 13 Hình 3.3: Bảng đếm số cịn lại .14 Hình 3.4: Bảng đếm số lại hoạt động 14 Hình 3.5: Nút giải 15 Hình 3.6: Giao diện nhập .15 Hình 3.7: Giao diện giải thành cơng .16 Hình 3.8: Giao diện thơng báo bảng giải 16 Hình 3.9: Giao diện thơng báo lỗi 17 Hình 3.10: Giao diện bảng giải thành cơng 17 Hình 3.11: Giao diện giải .18 lOMoARcPSD|15978022 Môn học Cấu trúc liệu giải thuật nâng cao cung cấp kiến thức chiến lược, kỹ thuật, cấu trúc liệu phức tạp Với kiến thức đạt q trình học tập, nhóm chúng em vận dụng vào đề tài giải toán đố sudoku với kỹ thuật quay lui Đề tài Quay lui sudoku sử dụng ba ngôn ngữ html css javascript để biểu diễn kỹ thuật quay lui với công cụ lập trình Visual Studio Code 2020, với trình quản lý phiên Git, chạy node package live-server offline Chương trình deploy lên GitHub chạy online với tên miền: Nhóm chúng em xin cảm ơn thầy Vũ Văn Định tận tình truyền đạt kiến thức trình học tập trình làm chuyên đề lOMoARcPSD|15978022 NỘI DUNG THỰC HIỆN Chương Giới thiệu toán thực 1.1 Giới thiệu tốn sudoku Trị chơi kiến trúc sư Howard Garns New York thiết kế giới thiệu lần vào năm 1979 tạp chí Dell (Mỹ) với tên gọi "Number Place" Tháng 4/1984, Number Place lần giới thiệu Nhật báo Monthly Nikolist với tên gọi "Suuji wa dokusinh ni kagiru", dịch sang tiếng Anh có nghĩa "những số phải độc nhất" "những số tìm thấy lần" "rút gọn" thành sudoku (su = number, doku = single) Nhưng trò chơi trở nên phổ biến người Anh nhập Báo Times số ngày 12/11/2004 giới thiệu với tên gọi “sudoku” dựa kết phát triển chương trình trị chơi máy vi tính quan tòa hưu người New Zealand sống Hongkong tên Wayne Gould Sau đó, sudoku xuất hầu hết tờ báo hàng đầu Anh "đưa" đến Australia nhờ tập đồn báo chí Telegarph Từ ngày 2/8/2005, chương trình Radio Times đài BBC (Anh) có chuyên đề tuần sudoku mang tên Super sudoku sudoku xuất tivi lần vào ngày 1/7/2005 chương trình sudoku Live kênh Sky One Đây thi gồm đội (mỗi đội người với nhân vật tiếng) tranh tài với nhau, tạo nên bảng sudoku lớn giới (rộng 84 m với 1905 giải pháp đúng), câu đố khắc sườn đồi Chipping Sodbury nước Anh Hiện nay, sudoku có mặt báo, tạp chí hàng đầu trở thành trị chơi gây sốt 40 quốc gia vùng lãnh thổ giới, có Việt Nam sudoku xuất Việt Nam sớm tạp chí Khám Phá (Trực thuộc Sở Khoa học Công nghệ Thành phố Hồ Chí Minh), sau đến Thanh Niên, Hoa Học Trị, xem hình thức giải trí đầy trí tuệ giới trẻ Đặc biệt, mục Vua trị chơi báo Hoa Học Trị với "món chủ lực" sudoku thu hút đông học sinh tham gia (theo kết công bố báo) Quy luật trò chơi tương đối đơn giản Cho bàn hình vng chia thành lưới 81 nhỏ gồm hàng cột, 81 ô nhỏ lại chia thành vùng, vùng có Đề sudoku bàn hình vng thế, số người ta điền sẵn số giá trị lOMoARcPSD|15978022 Cách chơi sau: Phải điền số từ đến vào hàng dọc, ngang không trùng lặp Ở hàng dọc, hàng ngang ô vuông 3*3 phân cách vạch đen đậm số sử dụng lần không lặp lại Ví dụ sau: Hình 1.1: Ví dụ sudoku 1.2 Giới thiệu kỹ thuật quay lui Quay lui (tiếng Anh: backtracking) chiến lược tìm kiếm lời giải cho toán thỏa mãn ràng buộc Người đề thuật ngữ (backtrack) nhà toán học người Mỹ D H Lehmer vào năm 1950 1.2.1 Giải thích Các tốn thỏa mãn ràng buộc tốn có lời giải đầy đủ, thứ tự phần tử khơng quan trọng Các toán bao gồm tập biến mà biến cần gán giá trị tùy theo ràng buộc cụ thể toán Việc quay lui để thử tất tổ hợp để tìm lời giải Thế mạnh phương pháp nhiều cài đặt tránh việc phải thử nhiều tổ hợp chưa hoàn chỉnh, nhờ giảm thời gian chạy Phương pháp quay lui có quan hệ chặt chẽ với tìm kiếm tổ hợp lOMoARcPSD|15978022 1.2.2 Cài đặt Về chất, tư tưởng phương pháp thử khả tìm thấy lời giải Đó q trình tìm kiếm theo độ sâu tập hợp lời giải Trong trình tìm kiếm, ta gặp hướng lựa chọn không thỏa mãn, ta quay lui điểm lựa chọn nơi có hướng khác thử hướng lựa chọn Khi thử hết lựa chọn xuất phát từ điểm lựa chọn đó, ta quay lại điểm lựa chọn trước thử hướng lựa chọn Q trình tìm kiếm thất bại khơng cịn điểm lựa chọn Quy trình thường cài đặt hàm đệ quy mà thể hàm lấy thêm biến gán tất giá trị cho biến đó, với lần gán trị lại gọi chuỗi đệ quy để thử biến Chiến lược quay lui tương tự với tìm kiếm theo độ sâu sử dụng khơng gian nhớ hơn, lưu giữ trạng thái lời giải cập nhật 1.2.3 Heuristic Để tăng tốc trình tìm kiếm, giá trị chọn, trước thực lời gọi đệ quy, thuật toán thường xóa bỏ giá trị khỏi miền xác định biến có mâu thuẫn chưa gán (kiểm tra tiến forward checking) kiểm tra tất số để tìm giá trị khác bị loại trừ giá trị vừa gán (lan truyền ràng buộc - constraint propagation) Người ta thường sử dụng số phương pháp heuristic để tăng tốc cho trình quay lui Do biến xử lý theo thứ tự bất kỳ, việc thử biến bị ràng buộc chặt (nghĩa biến có lựa chọn giá trị nhất) thường có hiệu tỉa tìm kiếm từ sớm (cực đại hóa ảnh hưởng lựa chọn sớm hành) Các cài đặt quay lui phức tạp thường sử dụng hàm biên, hàm kiểm tra xem từ lời giản chưa đầy đủ thu lời giải hay không, nghĩa hướng liệu có ích hay khơng Nhờ đó, kiểm tra biên phát lời giải dở dang chắn thất bại nâng cao hiệu tìm kiếm Do hàm hay chạy, bước, phí tính tốn biên cần tối hiểu, khơng, hiệu tồn cục thuật tốn khơng cải tiến lOMoARcPSD|15978022 Các hàm kiểm tra biên tạo theo kiểu gần hàm heuristic khác: nới lỏng số điều kiện toán  Nét đặc trưng kĩ thuật quay lui bước hướng tới lời giải cuối tốn hồn tồn làm thử  Tại bước, có lựa chọn chấp nhận ghi nhận lại lựa chọn tiến hành bước thử Cịn ngược lại khơng có lựa chọn thích hợp làm lại bước trước, xóa bỏ ghi nhận quay chu trình thử lựa chọn cịn lại  Điểm quan trọng thuật tốn phải ghi nhớ bước qua để tránh trùng lặp quay lui Các thông tin cần lưu trữ vào ngăn xếp-Stack (vào sau trước), nên thuật toán thể ý thiết kế cách đệ quy  Thuật toán quay lui thường cài đặt theo lối đệ quy, lần gọi hàm đệ quy, hàm đệ quy truyền tham số (trong tham số) số toán con, hàm cố gắng tìm lời giải cho tốn đó, tìm thấy gọi hàm đệ quy để giải toán đưa đáp án toán lớn đầy đủ lời giải, khơng tìm thấy chương trình trở điểm gọi hàm Mục đích việc sử dụng hàm đệ quy để thuật toán rỏ ràng, dễ viết, dễ hiểu để bảo toàn biến, trạng thái lúc giải tốn 1.2.5 Ví dụ Sử dụng chiến lược 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ả 1.2.6 Phương pháp Giả thiết cấu hình cần liệt kê có dạng (x1,x2, ,xn) Khi thuật tốn quay lui thực qua bước sau: 1) Xét tất giá trị x1 nhận, thử cho x1 nhận giá trị Với giá trị thử cho x1 ta sẽ: lOMoARcPSD|15978022 2) Xét tất giá trị x2 nhận, lại thử cho x2 nhận giá trị Với giá trị thử gán cho x2 lại xét tiếp khả chọn x3 tiếp tục đến bước: n) Xét tất giá trị xn nhận, thử cho xn nhận giá trị đó, thơng báo cấu hình tìm (x1,x2, ,xn) 1.2.7 Mơ tả Thuật tốn quay lui mơ tả đoạn mã giả (pseudocode) sau: {Thủ tục thử cho xi nhận giá trị mà nhận} procedure Try(i: Integer); begin for (mọi giá trị gán cho xi) begin ; if (xi phần tử cuối cấu hình) then else begin ; Try(i + 1); {Gọi đệ qui để chọn tiếp xi + 1} ; lOMoARcPSD|15978022 end; end; end; (Thuật toán quay lui bắt đầu lời gọi Try(1);) Ta trình bày q trình tìm kiếm lời giải thuật toán quay lui sau: Hình 1.2: Ví dụ quay lui 1.3 Kết luận 1.3.1 Về toán sudoku Đây toán đơn giản lại địi hỏi nhiều trí tuệ Thích hợp để rèn luyện khả tư Và vơ thích hợp để ứng dụng quay lui để giải 1.3.2 Về kỹ thuật quay lui lOMoARcPSD|15978022 Ưu điểm: Việc quay lui thử tất tổ hợp để tìm lời giải Thế mạnh phương pháp nhiều cài đặt tránh việc phải thử nhiều trường hợp chưa hồn chỉnh, nhờ giảm thời gian chạy Nhược điểm: Trong trường hợp xấu độ phức tạp quay lui cấp số mũ Vì mắc phải nhược điểm sau: - Rơi vào tình trạng "thrashing": qúa trình tìm kiếm gặp phải bế tắc với nguyên nhân - Thực công việc dư thừa: Mỗi lần quay lui, cần phải đánh giá lại lời giải đơi lúc điều khơng cần thiết - Không sớm phát khả bị bế tắc tương lai Quay lui chuẩn, khơng có chế nhìn tương lai để nhận biết đc nhánh tìm kiếm vào bế tắc Chương Phân tích tốn 2.1 Phân tích toán  Input: Một bảng số người dùng nhập giao diện (GUI) Ví dụ người dùng nhập sau: lOMoARcPSD|15978022 Hình 2.1: Input Sudoku  Output: Kết tốn Có thể có đáp án khơng có đáp án Sẽ hiển thị sau: Hình 2.2: Output Sudoku 2.2 Giải thuật cho toán 2.2.1 Giải thuật cho toán Bước Lấy tất số phù hợp với ô trống lOMoARcPSD|15978022 Bước Tạo tất hàng phù hợp hàng tùy thuộc vào danh sách số phù hợp Bước Chọn hàng từ danh sách hàng đặt vào hàng Bước Đi đến hàng tìm tất số phù hợp với ô Bước Tạo tất hàng phù hợp hàng này, sau chuyển sang bước đến hàng cuối khơng cịn hàng cịn lại Bước Nếu hàng khơng cịn khả chuyển sang hàng trước thử khả từ danh sách hàng khả Bước Nếu hàng cuối đạt hàng thỏa mãn tìm thấy toán giải 2.2.2 Tổ chức chương trình Chương trình tổ chức theo dạng hàm thủ tục với hàm ứng với nhiệm vụ khác Chương trình viết theo hướng đơn giản với 1giao diện để người dùng tương tác Dự kiến giao diện gồm bảng sudoku chính, bảng đếm số lượng nút chạy giải 2.2.3 Các hàm giải  function getColumns(grid) {}: trả trả mảng cột bảng sudoku  function getBlocks(grid) {}: trả giá trị khối 3x3 bảng sudoku  function replaceCharAt(string, index, char) {}: thực thay giá trị ô bảng  function generatePossibleNumber(rows, columns, blocks) {}: Sinh tất số thỏa yêu cầu để điền vào bảng sudoku lOMoARcPSD|15978022  function solveGrid(possibleNumber, rows, startFromZero) {}: Gọi hàm nextStep() để giải tốn, trả kết bảng có, khơng trả khơng giải  function nextStep(level, possibleNumber, rows, solution, startFromZero) {}: hàm chạy đệ quy, kiểm tra xem giá trị hàng có hay chưa kiểm tra tính hợp lệ giá trị ô Trả có đáp án, -1 khơng có  function generatePossibleRows(possibleNumber) {}: Sinh hàng số thỏa yêu cầu để điền vào bảng sudoku  function ViewPuzzle(grid) {}: Đọc đầu vào người dùng  function readInput() {}: Đọc đầu vào người dùng  function checkValue(value, row, column, block, defaultValue, currectValue) {}: kiểm tra giá trị người dùng nhập  function updateRemainingTable(){}:Hỗ trợ cập nhật giá trị bảng remaining  function solveSudoku(changeUI) {}: thay đổi giao diện kết  Function solveButtonClick() {} Gọi tất hàm người dùng bấm, thực thi việc giải toán 2.3 Cấu trúc liệu sử dụng Cấu trúc liệu toán liệu kiểu mảng người dùng điền liệu vào bảng sudoku Một mảng chứa liệu bảng sudoku mà người dùng nhập vào: let puzzle = []; Một mảng chứa kết đầu bảng sudoku giải: let solution = []; Một mảng dùng để đếm số lượng ứng với số chưa người dùng nhập: let remaining = [9, 9, 9, 9, 9, 9, 9, 9, 9]; Ví dụ puzzle = [[1,2,3,4,5,6,7,8,9]] nghĩa người dùng nhập vào dòng bảng sudoku giá trị ô thứ nhất, ô thứ 2,… ô thứ solution=[ [1,2,3,4,5,6,7,8,9], 10 lOMoARcPSD|15978022 [4,5,6,7,8,9,1,2,3], [7,8,9,1,2,3,4,5,6], [2,1,4,3,6,5,8,9,7], [3,6,5,8,9,7,2,1,4], [8,9,7,2,1,4,3,6,5], [5,3,1,6,4,2,9,7,8], [6,4,2,9,7,8,5,3,1], [9,7,8,5,3,1,6,4,2] ] đáp án cho toán người dùng nhập Tương ứng hàng đầu tiên, giá trị điền vào ô thuộc hàng bảng, giá trị điền vào ô thứ hai hàng bảng, tiếp tục tới số hàng cuối điền vào ô cuối hàng cuối remaining=[8,9,8,9,9,9,0,9,7] tức người dùng điền vào bảng giá trị bảng có giá trị 1, giá 3, giá trị 9, giá trị Chương Cài đặt, đánh giá thử nghiệm 3.1 Giới thiệu chương trình Chương trình có giao diện Người dùng nhập bảng sudoku thông qua bảng hình Bên trái có bảng đếm số lượng số chưa nhập Trên nút giải bảng sudoku Chương trình nhắm tới mục tiêu giải tốn nhanh xác 11 lOMoARcPSD|15978022 Hình 3.1: Giao diện 3.2 Các thành phần chương trình 3.2.1 Thành phần hiển thị nhập bảng sudoku 12 lOMoARcPSD|15978022 Hình 3.2: Giao diện nhập Đây hình hiển thị đáp án cho sudoku Các chức bao gồm nút di chuyển nút tab ta sử dụng chuột hỗ trợ cho trình nhập liệu 13 lOMoARcPSD|15978022 3.2.2 Bảng đếm số lượng chưa nhập Hình 3.3: Bảng đếm số cịn lại Bảng giúp đếm số lượng số chưa nhập Ví dụ người dùng nhập số lần số lượng cịn 8: Hình 3.4: Bảng đếm số cịn lại hoạt động 3.2.3 Nút giải 14 lOMoARcPSD|15978022 Hình 3.5: Nút giải Khi người dùng bấm nút chạy chương trình giải Sau khoảng thời gian ngắn ( tối đa giây) thông báo giải đáp án 3.3 Một số hình ảnh chạy chương trình Hình 3.6: Giao diện nhập 15 Downloaded by Quang Quang (khoa31141020806@gmail.com) ... Hình 3.7: Giao diện giải thành cơng .16 Hình 3.8: Giao diện thông báo bảng giải 16 Hình 3.9: Giao diện thơng báo lỗi 17 Hình 3.10: Giao diện bảng giải thành công 17 Hình 3.11:... Nội dung thực Chữ ký Điểm Chữ ký Ghi Giảng viên chấm 1: Giảng viên chấm 2: MỤC LỤC PHIẾU CHẤM ĐIỂM MỤC LỤC DANH MỤC HÌNH ẢNH LỜI MỞ ĐẦU NỘI DUNG THỰC HIỆN Chương Giới thiệu toán thực ... sudoku có mặt báo, tạp chí hàng đầu trở thành trị chơi gây sốt 40 quốc gia vùng lãnh thổ giới, có Việt Nam sudoku xuất Việt Nam sớm tạp chí Khám Phá (Trực thuộc Sở Khoa học Công nghệ Thành phố Hồ

Ngày đăng: 10/01/2023, 23:17

Tài liệu cùng người dùng

Tài liệu liên quan