Nghiên cứu phương pháp quay lui và ứng dụng giải bài toán sudoku

54 131 2
Nghiên cứu phương pháp quay lui và ứng dụng giải bài toán 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

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN -  - PHẠM THỊ THANH HIỀN NGHIÊN CỨU PHƯƠNG PHÁP QUAY LUI VÀ ỨNG DỤNG GIẢI BÀI TỐN SUDOKU KHĨA LUẬN TỐT NGHIỆP Mục lục MỞ ĐẦU I LÝ DO CHỌN ĐỀ TÀI: II MỤC TIÊU, NHIỆM VỤ: .2 III PHƯƠNG PHÁP NGHIÊN CỨU: IV BỐ CỤC CỦA ĐỀ TÀI: Chương I: CƠ SỞ LÝ THUYẾT .3 I CƠ SỞ LÝ THUYẾT: .3 Mảng: .3 1.1 Mơ hình quan niệm: 1.2 Các đặc trưng bản: 1.3 Cấu trúc lưu trữ: 1.4 Các phép toán bản: Hàm đệ quy: 2.1 Đệ quy gì? 2.2 Cấu trúc chương trình đệ quy: 2.3 Đặc điểm: 2.4 Ví dụ: Khử đệ quy: 3.1 Khái niệm: 3.2 Cách thực : .7 II NGƠN NGỮ LẬP TRÌNH: .7 Vài nét Visual C#: Đặc điểm ngôn ngữ C#: Chương II: PHƯƠNG PHÁP QUAY LUI 10 I KHÁI NIỆM QUAY LUI: 10 * Tư tưởng thuật toán: 11 II MƠ HÌNH CỦA BÀI TỐN: .11 III ỨNG DỤNG: 12 Phương pháp : .12 Giải thuật tổng quát : 13 Chương III: BÀI TOÁN SUDOKU .15 I GIỚI THIỆU BÀI TOÁN: 15 Lịch sử đời: .15 Luật chơi: 16 Các biến thể: 17 II XÂY DỰNG CẤU TRÚC DỮ LIỆU CHO BÀI TOÁN: 18 III THUẬT TOÁN: 23 Tổng quan: 23 1.1 Xác định toán: 23 1.1.1 Thông tin vào: 23 1.1.2 Thông tin ra: 23 1.2 Cách xác định ô số bất kỳ: 23 1.2.1 Xác định ô theo số thứ tự từ đến 81: 23 1.2.2 Xác định [hàng, cột]: 24 1.2.3 Xác định [vùng, số thứ tự vùng]: 24 Vấn đề đặt ra: 25 Giải vấn đề: .26 3.1 Vấn đề 1: .26 3.2 Vấn đề 2: .30 Giải thuật chính: 31 Các phương thức sử dụng chương trình: .32 Xây dựng hàm: .33 6.1 Hàm kiểm tra cột: 33 6.2 Hàm kiểm tra hàng: 34 6.3 Hàm kiểm tra vùng: 35 6.4 Hàm giải chương trình thủ cơng: .36 6.5 Hàm giải chương trình phương pháp quay lui: 36 6.6 Hàm giải đến đáp án cần chọn: 38 6.7 Hàm đếm số đáp án: 38 IV GIỚI THIỆU CHƯƠNG TRÌNH GIẢI: 38 Tổng quan: 38 Chức chính: 43 Bảng phím tắt: 44 V THỬ NGHIỆM: 45 KẾT LUẬN 48 TÀI LIỆU THAM KHẢO 49 MỞ ĐẦU I LÝ DO CHỌN ĐỀ TÀI: Ngày với phát triển không ngừng khoa học kỹ thuật, đặc biệt ngành mũi nhọn như: Điện Tử - Tin Học - Viễn Thông v.v Nếu không thường xun cập nhật thơng tin khơng bắt kịp đà phát triển giới Đất nước ngày tiến bộ, khoa học kĩ thuật ngày phát triển đòi hỏi người ngày phải có lực thật sự, phải có khả tư logic tốt để tiếp cận với công nghệ đại cách nhanh chóng Vấn đề đặt để phát triển khả tư người, đơi chúng khơng nhận trò chơi trí tuệ, trò chơi với số giúp rèn luyện trí não, tư logic Và SuDoKu trò chơi trí tuệ tiếng, trò chơi khơng ồn âm thầm phát triển khơng đơn trò chơi mà giúp kích thích tư duy, suy nghĩ logic thông qua số Ngoài vấn đề trên, SuDoKu hấp dẫn giới trẻ lý chơi lúc nơi, chơi xe buýt, chơi, chí dã ngoại, du lịch Luật chơi SuDoKu đơn giản, đáp án lại khó giải, khơng cần dùng đến kiến thức số học hay tính tốn, SuDoKu thích ứng cho người, trẻ em có hội giải SuDoKu thành cơng người lớn Trong thuật tốn quay lui thuật tốn điển hình để giải lớp toán liệt kê hay toán tối ưu như: toán người giao hàng, toán mã tuần, tốn hậu, tốn tìm đường mê cung Bằng việc liệt kê tình huống, thử khả tìm thấy lời giải đúng, thuật toán quay lui chia nhỏ toán, lời giải toán lớn kết việc tìm kiếm theo chiều sâu tập hợp toán phần tử -1- Nhận thấy tư tưởng thuật toán phù hợp với cách giải trò chơi, nên đề tài ”Nghiên cứu phương pháp quay lui ứng dụng giải toán SuDoku” thực nhằm tìm hiểu thuật tốn quay lui ứng dụng II MỤC TIÊU, NHIỆM VỤ: Đề tài thực nhằm đạt mục tiêu hiểu rõ, hiểu sâu sắc thuật tốn quay lui Xây dựng thành cơng chương trình giải SuDoKu với nhiều đáp án với thời gian nhanh BI PHƯƠNG PHÁP NGHIÊN CỨU: - Tìm hiểu thơng tin mạng internet, sách, báo, tạp chí… - Thu thập ý kiến chuyên gia (giáo viên hướng dẫn, giáo viên khoa, ý kiến bạn bè,…) - Kết hợp nghiên cứu lý thuyết với thực hành, rèn luyện kỹ phân tích chương trình kỹ lập trình IV BỐ CỤC CỦA ĐỀ TÀI: Nội dung đề tài trình bày sau: MỞ ĐẦU Chương I: CƠ SỞ LÝ THUYẾT Chương II: PHƯƠNG PHÁP QUAY LUI Chương III: BÀI TOÁN SUDOKU KẾT LUẬN TÀI LIỆU THAM KHẢO -2- CƠ SỞ LÝ THUYẾT Chương I: I CƠ SỞ LÝ THUYẾT: Mảng: 1.1 Mơ hình quan niệm: Mảng dãy có thứ tự (về mặt vị trí) phần tử với hai đặc điểm sau : + Số lượng phần tử cố định + Mọi phần tử có kiểu liệu (dữ liệu sở mảng) 1.2 Các đặc trưng bản: - Cho phép truy cập ngẫu nhiên đến phần tử Thời gian truy cập đến phần tử - Số lượng phần tử mảng cố định 1.3 Cấu trúc lưu trữ: - Cấu trúc lưu trữ đơn giản dùng địa tính để thực lưu trữ tìm kiếm phần tử, mảng chiều hay vectơ - Các phần tử bố trí sát nhớ theo thứ tự tăng dần số nên dễ dàng tìm địa phần tử biết số a1 a2 1.4 Các phép toán bản: - Thường có phép tạo lập (create) mảng, tìm kiếm (retrieve) phần tử mảng, cập nhật (update) phần tử mảng …Ngoài giá trị, phần tử mảng đặc trưng số (index) thể thứ tự phần tử mảng Vectơ mảng chiều, phần tử a i ứng với số i Ma trận mảng hai chiều, phần tử aij ứng với hai số i j Tương tự người ta mở rộng mảng hai chiều , mảng ba chiều, …, mảng n chiều -3- Hàm đệ quy: 2.1 Đệ quy gì? Ta nói: - Một đối tượng đệ quy bao gồm phận định nghĩa dạng - Một thủ tục gọi đệ quy trình thực phải gọi đến với kích thước nhỏ tham số - Trong thân hàm, gọi tới hàm để xử lý tốn gọi hàm đệ quy Ví dụ: 1) Định nghĩa số tự nhiên: - số tự nhiên - n số tự nhiên n-1 số tự nhiên 2) Định nghĩa hàm giai thừa: - 0!=1 - Nếu n > n! = n(n-1)! 2.2 Cấu trúc chương trình đệ quy: Một chương trình đệ quy gồm phần: - Phần sở : Trong đó, chứa tác động hàm thủ tục với số giá trị cụ thể ban đầu tham số (hay gọi trường hợp dừng) Ví dụ : if n=1 then gt:=1; - Phần đệ quy: Trong đó, tác động cần thực cho giá trị thời tham số định nghĩa tác động định nghĩa trước với kích thước nhỏ tham số Ví dụ: if n>1 then gt:=n*gt(n-1); -4- 2.3 Đặc điểm: - Mỗi lần hàm tự gọi đệ quy đến máy tính tự tạo biến cục - Có lần hàm gọi đệ quy có nhiêu lần khỏi hàm (kiểu lặp hàm) - Khi ngồi hàm đệ quy loạt biến cục tạo dùng đệ quy lúc giải phóng, chúng giải phóng trước biến cục (sinh đệ quy) tạo sau - Sử dụng đệ quy phương pháp làm cho chương trình ngắn gọn, dễ hiểu làm tốn nhớ thời gian 2.4 Ví dụ: Hàm tính giai thừa n (tính n!): Function giaithua(n:word):integer; begin if n=0 then giaithua:=1 else giaithua:=giaithua(n-1)*n; end; Ví dụ: Tính n! =3 Ta có giá trị truyền vào hàm gt qua biến n Trong ví dụ này, qui trình thực sau: - Khi có lệnh gọi hàm, chẳng hạn: n := gt(3); - Thì máy ghi nhớ là: gt(3) := * gt(2); tính gt(2) - Kế tiếp máy lại ghi nhớ: gt(2) := * gt(1); tính gt(1) - Theo định nghĩa hàm thì: - 5- gt(1) := 1; - Máy quay ngược lại: gt(2) := * 1; cho kết - Tiếp tục: - gt(3) := * 2; cho kết - Như kết cuối trả Ta có: 3! = Nhận xét  Ưu điểm: - Điểm mạnh lớn nhất: chương trình, code trở nên ngắn gọn, dễ hiểu, thuận lợi cho việc chỉnh sửa - Dễ chuyển thành chương trình ngơn ngữ lập trình  Nhược điểm: - Nhược điểm lớn tốn nhớ - Mất nhiều thời gian xử lý, làm giảm tốc độ chạy chương trình - Khơng áp dụng cho ngơn ngữ lập trình Đệ quy khơng phương pháp lập trình quan trọng mà phương pháp suy nghĩ để giải vấn đề cách tổng quát dựa ý tưởng: + Đơn giản hố cơng việc + Phân vùng để xử lý Khử đệ quy: Đệ quy tim nghiên cứu lý thuyết thực hành tính tốn, thể nhiều sức mạnh có ưu điểm nhiều tốn Nhưng có đơi khi, hạn hẹp nhớ dành cho chương trình khơng cho phép làm điều đó.Vì vấn đề khử đệ quy lại cần quan tâm, xem xét -6- } 6.4 Hàm giải chương trình thủ công: void preSolve() { int k; while (top != 0) { checkrow(); checkcollum(); checkarea(); k = pop(); effectFromANumber(tox(k), toj(k)); if (!HaveResult) return; }; } 6.5 Hàm giải chương trình phương pháp quay lui: int Solve(int count) { int ResultCount = 0; do{ index+=add; if(index==size*size+1) { ResultCount++; add = -1; if (count == -1)//Khi cần đếm số nghiệm { if (ResultCount > MaxIndexResultCanFind) return -1;//Nếu có nhiều nghiệm thơi -36- continue; } else { if (ResultCount >= count)//Nếu tìm thấy nghiệm thứ count { for (int ii = 1; ii

Ngày đăng: 06/10/2019, 07:35

Từ khóa liên quan

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

Tài liệu liên quan