(Tiểu luận) 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

28 15 0
(Tiểu luận) 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

Đ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

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 Giảng viên hướng dẫn : NGUYỄN THẾ SINH GIÁP ANH TÀI NGUYỄN HẢI NAM : VŨ VĂN ĐỊNH : CÔNG NGHỆ THÔNG TIN Ngành : Chuyên ngành : Lớp : 2018 - 2023 Khóa Hà Nội, tháng 07 năm 2020 PHIẾU CHẤM ĐIỂM STT Họ tên sinh viên Nguyễn Thế Sinh Nội dung thực Điểm Chữ ký Giáp Anh Tài Nguyễn Hải Nam Họ tên giảng viên 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 1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3 1.3.1 1.3.2 2.2 2.2.1 2.2.2 2.2.3 2.3 3.1 3.2 3.2.1 3.2.2 3.2.3 3.3 3.4 Giới thiệu toán sudoku Giới thiệu kỹ thuật quay lui Giải thích Cài đặt Heuristic Tư tưởng thuật toán Ví dụ Phương pháp Mô tả Kết luận Về toán sudoku Về kỹ thuật quay lui Chương Phân tích tốn 2.1 Phân tích tốn Giải thuật cho toán Giải thuật cho toán Tổ chức chương trình Các hàm giải Cấu trúc liệu sử dụng Chương Cài đặt, đánh giá thử nghiệm Giới thiệu chương trình Các thành phần chương trình Thành phần hiển thị nhập bảng sudoku Bảng đếm số lượng chưa nhập Nút giải Một số hình ảnh chạy chương trình Kết luận KẾT LUẬN DANH MỤC TÀI LIỆU THAM KHẢO DANH MỤC HÌNH ẢNH Hình 1.1: Ví dụ sudoku Hình 1.2: Ví dụ quay lui Hình 2.1: Input Sudoku Hình 2.2: Output Sudoku Hình 3.1: Giao diện 12 2 3 4 5 7 8 9 10 10 12 12 13 13 14 15 15 18 19 20 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 khơng thể giải 18 LỜI MỞ ĐẦU Recommandé pour toi Suite du document cidessous Life B1 Pre Intermediate W b trang 51 51 Marketing 100% (2) BỘ ĐỀ ĐỌC HIỂU - NLXH - Lecture notes 1BỘ ĐỀ ĐỌC HIỂU - NLXH - Lecture notes mẫu đề cương NCKH Aucun Unit4BỘ ĐỀ ĐỌC HIỂU - NLXH - Lecture notes mẫu đề cương NCKH Aucun Unit3BỘ ĐỀ ĐỌC HIỂU - NLXH - Lecture notes mẫu đề cương NCKH Aucun 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 đề NỘI DUNG THỰC HIỆN Chương Giới thiệu toán thực 1.1 Giới thiệu toá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ị 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 tố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 tố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 hồ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 end; end; end; (Thuật toán quay lui bắt đầu lời gọi Try(1);) Ta trình bày trình tìm kiếm lời giải thuật tố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 Ư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 tố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: 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 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 tố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 function solveGrid(possibleNumber, rows, startFromZero) {}: Gọi hàm nextStep() để giải toá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 [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 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

Ngày đăng: 20/09/2023, 14:52

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

Tài liệu liên quan