Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 68 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
68
Dung lượng
479,42 KB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN Bế Thị Hương MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG CỦA THUẬT TOÁN VÀ ỨNG DỤNG LUẬN VĂN THẠC SĨ KHOA HỌC Hà Nội – Năm 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - Bế Thị Hương MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG CỦA THUẬT TOÁN VÀ ỨNG DỤNG Chuyên ngành: Cơ sở Toán học cho Tin học Mã số: 60460110 LUẬN VĂN THẠC SĨ KHOA HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC: TS NGUYỄN THỊ HỒNG MINH Hà Nội – Năm 2015 LỜI CẢM ƠN Lời em xin chân thành cảm ơn thầy giáo, cô giáo giảng dạy lớp cao học Cơ sở Toán học cho Tin học, Khoa Toán – Cơ – Tin học, Trường Đại học Khoa học Tự nhiên – ĐHQGHN khóa 2012 – 2014 Các thầy cô nhiệt tình, tâm huyết giảng dạy cho em học tập, nghiên cứu bổ sung thêm nhiều kiến thức quan trọng, hữu ích nghiên cứu công tác giảng dạy trường THPT chuyên Đồng thời kịp nhận sửa đổi, bổ sung kiến thức hiểu chưa thật xác giúp tăng cường lực phát triển tư nghiên cứu khoa học Đặc biệt, em gửi lời cảm ơn chân thành sâu sắc tới cô giáo TS.Nguyễn Thị Hồng Minh (Khoa Sau Đại học – ĐHQGHN) Cô giảng dạy với hướng dẫn luận văn cho em cách khoa học, tận tâm, chu đáo chi tiết để em hoàn thành luận văn cách tốt Cảm ơn gia đình cho em chỗ dựa vững để hoàn thành khóa học hoàn thành luận văn Mặc dù có nhiều cố gắng việc nghiên cứu khoa học để hoàn thành luận văn nhiên hạn chế cá nhân mặt thời gian nên em khó tránh thiếu sót Kính mong thầy cô bạn đóng góp ý kiến quý báu để hoàn chỉnh luận văn MỤC LỤC MỞ ĐẦU CHƯƠNG TỔNG QUAN VỀ PHÂN TÍCH THUẬT TOÁN 1.1 Một số khái niệm 1.1.1 Bài toán 1.1.2 Thuật toán (Algorithm) 1.1.3 Cấu trúc liệu (Data Structure) 10 1.1.4 Chương trình (Program) 10 1.2 Một số phương pháp thiết kế thuật toán 11 1.2.1 Kỹ thuật đệ quy 11 1.2.2 Phương pháp chia để trị (Divide and Conquer) 14 1.2.3 Phương pháp quay lui (Backtracking) 15 1.2.4 Phương pháp nhánh cận 17 1.2.5 Phương pháp quy hoạch động (Dynamic Programming ) 19 1.2.6 Phương pháp tham lam (Greedy Method) 21 1.3 Phân tích thuật toán 22 1.3.1 Tính đắn thuật toán 22 1.3.2 Độ phức tạp thuật toán 23 a) Độ phức tạp mặt thời gian 23 b) Độ phức tạp mặt không gian 23 CHƯƠNG MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG CỦA THUẬT TOÁN 25 2.1 Các chiến lược chứng minh tính thuật toán 25 2.2 Các phương pháp chứng minh tính (Correctness proofs) 26 2.2.1 Phương pháp quy nạp (induction) 26 a) Phương pháp quy nạp toán học 26 b) Chứng minh tính thuật toán phương pháp quy nạp 27 c) Một số ví dụ 27 2.2.2 Phương pháp bất biến vòng lặp (loop invariant) 33 a) Chứng minh tính thuật toán phương pháp bất biến vòng lặp 33 b) Các đặc trưng bất biến vòng lặp 35 c) Một số ví dụ 35 CHƯƠNG ỨNG DỤNG CHỨNG MINH TÍNH ĐÚNG CỦA MỘT SỐ THUẬT TOÁN 44 3.1 Bài toán: Dãy đơn điệu tăng dài 44 3.2 Bài toán: Chia kẹo 53 3.3 Bài toán Cây bao trùm nhỏ (Minimum spanning tree) 54 KẾT LUẬN 61 MỞ ĐẦU Thế kỷ XXI kỷ tri thức đại, tri thức không kể đến công cụ hỗ trợ đắc lực máy tính điện tử lĩnh vực sống Mặc dù công nghệ chế tạo ngày phát triển phát triển với tốc độ nhanh để sử dụng máy tính điện tử cách hiệu cao thuật toán (Algorithm) thành phần luôn quan trọng thiếu kể từ máy tính điện tử đời Theo lịch sử toán học nguồn gốc từ thuật toán “Algorithm” bắt nguồn từ “Algorism” tên nhà bác học tiếng người Arập Abu Jafar Mohammed ibn Musâ al Khowârizmi (Phiên âm từ al Khowârizmi Algorism) Ông người viết hai sách tiếng “Sơ lược phép tính” “Về hệ đếm ấn độ” vào khoảng năm 850 Đây sách giáo khoa tiếng toán học Lịch sử ghi nhận người coi nhà lập trình giới nữ bá tước Ada Lovelace (10/12/1815 - 27/11/1852), tên khai sinh Augusta Ada Byron Các nhà khoa học sau cho thuật toán (viết năm 1842) Ada Lovelace thuật toán máy tính người lập ra, lần thể rõ bước phát triển logic, đặc trưng hoạt động xác định dành riêng cho máy tính Với lịch sử lâu đời thuật toán nghiên cứu phát triển tận ngày tiếp tục nghiên cứu phát triển Khi lập trình câu hỏi luôn đặt thuật toán thiết kế thuật toán sử dụng có hay không? Điều đảm bảo cho chương trình máy tính thực có cho kết hay không? (Chưa kể đến kỹ người lập trình) Vì việc xây dựng thuật toán tốt để giải toán cho bước quan trọng nói quan trọng việc giải toán máy tính điện tử Để đánh giá thuật toán tốt có nhiều tiêu chí bỏ qua tính thuật toán Và nội dung luận văn theo đề tài nghiên cứu: “Một số phương pháp chứng minh tính thuật toán ứng dụng” Luận văn nhằm tìm hiểu, nghiên cứu, tổng hợp phương pháp chứng minh tính thuật toán Cấu trúc luận văn gồm chương, nội dung sau: Chương Tổng quan phân tích thuật toán Chương nhằm tổng hợp lại số kiến thức chung toán, thuật toán, cấu trúc liệu, chương trình kiến thức phân tích thuật toán Gồm định nghĩa, khái niệm ví dụ để minh họa Trong chương tổng hợp lại số phương pháp thiết kế thuật toán thường sử dụng thực tế Như kỹ thuật đệ quy, phương pháp chia để trị, phương pháp quay lui, phương pháp nhánh cận, phương pháp quy hoạch động phương pháp tham lam Chương Một số phương pháp chứng minh tính thuật toán Nội dung chương gồm chiến lược chứng minh tính thuật toán; phương pháp cụ thể để chứng minh tính thuật toán phương pháp quy nạp phương pháp bất biến vòng lặp Đây điểm luận văn Trong đó, phương pháp quy nạp chứng minh cho thuật toán đệ quy, phương pháp bất biến vòng lặp chứng minh cho thuật toán không đệ quy Đối với phương pháp trình bày đặc điểm, phương pháp chung đồng thời nêu số ví dụ thuật toán chứng minh tính thuật toán Đối với thuật toán phức tạp có chứa đệ quy lặp cần kết hợp khéo léo hai phương pháp chứng minh tính thuật toán quy nạp bất biến vòng lặp Chương Ứng dụng chứng minh tính số thuật toán Nghiên cứu số toán có sử dụng thuật toán kinh điển, thường sử dụng vận dụng lý thuyết chương để chứng minh tính thuật toán Như toán dãy đơn điệu tăng dài nhất; Chia kẹo; Cây bao trùm nhỏ CHƯƠNG TỔNG QUAN VỀ PHÂN TÍCH THUẬT TOÁN Để khẳng định thuật toán tốt điều không dễ dàng Thật vậy, để đánh giá thuật toán tốt ta cần nhiều kỹ thuật từ thiết kế, phân tích đến đánh giá thuật toán Ở chương đề cập tổng quát đến vấn đề phân tích thuật toán số thuật toán thường dùng khoa học tính toán đại 1.1 Một số khái niệm 1.1.1 Bài toán Khoa học máy tính ngày giải nhiều vấn đề thực tế nhiều lĩnh vự khác nhau, vấn đề ta thường gọi toán Tuy nhiên toán trường hợp cụ thể mà toán mang tính tổng quát bao gồm tất khả giới thực vấn đề cần giải Như vậy, nói cách dễ hiểu toán việc ta muốn máy tính thực Có thể yêu cầu đơn giản in dòng chữ hình, giải phương trình bậc hai, giải hệ phương trình bậc hai ẩn kiểm tra số chẵn hay lẻ, Nhưng giải vấn đề phức tạp tìm đường mê cung, tìm đường ngắn nhất, tìm bao trùm, Điểm quan trọng giải toán máy tính cần xác định rõ biết input (dữ liệu vào) kết cần thu output (dữ liệu ra) phân tích mối quan hệ hai yếu tố Sau số ví dụ toán: • Bài toán 1.1: Kiểm tra tính nguyên tố số nguyên dương cho trước − Input: Số nguyên dương N − Output: Xác định N số nguyên tố N không số nguyên tố • Bài toán 1.2: Giải phương trình bậc hai ax2+bx+c=0 (a≠0) − Input: Các số thực a, b, c (a≠0) − Output: Các nghiệm x thỏa mãn phương trình cho thông báo nghiệm • Bài toán 1.3: Tìm ước số chung lớn hai số nguyên dương a, b − Input: Hai số nguyên dương a, b − Output: Ước số chung lớn a b • Bài toán 1.4: Xác định vị trí phần tử có giá trị số nguyên x dãy số nguyên a1, a2, , an − Input: Số n; dãy số nguyên a1, a2, , an số nguyên x − Output: Chỉ số i x=ai x mặt dãy • Bài toán 1.5 Cho đồ thị vô hướng G=(V, E) Tìm đường ngắn từ đỉnh u tới đỉnh v đồ thị G − Input: Đồ thị vô hướng G=(V, E) hai đỉnh u,v − Output: Xác định đường có độ dài ngắn d=(u=v1,v2, ,vn=v) (với đỉnh vi thuộc V, cung (vi, vi+1) thuộc E) • Bài toán 1.6 Sắp xếp dãy số cho trước thành dãy không giảm − Input: Số n dãy gồm n số < a1, a2, …, an> − Output: Một hoán vị < a'1, a'2, …, a'n > chuỗi đầu vào thỏa mãn: a'1 ≤ a'2 ≤ …≤ a'n 1.1.2 Thuật toán (Algorithm) Để giải toán máy tính sau xác định rõ ràng toán việc quan trọng phải đưa thuật toán tốt, thuật toán thiết kế lựa chọn thuật toán có Thuật toán để biểu diễn cách giải toán máy tính thêm a[k-1] vào đầu dãy tăng dài dãy a[k-1 n+1] ta dãy tăng dài a k −1 , a T[ k −1] , a T T[k −1] , , a n +1 0[...]... kiểm thử và chứng minh tính đúng: Để đảm bảo tính đúng của thuật toán một cách chặt chẽ hơn nữa ta có thể kết hợp cả hai chiến lược kiểm thử và chứng minh tính đúng đã nêu ở trên 2.2 Các phương pháp chứng minh tính đúng (Correctness proofs) Làm thế nào để biết thuật toán hoạt động thế nào? Cách tốt nhất là chứng minh thuật toán là đúng Có một số phương pháp chứng minh tính đúng của thuật toán như: Đối... chứng minh tính đúng của thuật toán cần dùng các kiến thức toán học để chứng minh thuật toán đúng Cách này chứng minh được cho bài toán tổng quát nhưng đòi hỏi tư duy trừu tượng và logic toán học chặt chẽ Có các phương pháp chứng minh tính đúng của thuật toán như phương pháp quy nạp, phương pháp bất biến vòng lặp Đây cũng là nội dung nghiên cứu chủ yếu khi thực hiện luận văn này c) Kết hợp kiểm thử và. .. nêu ở trên để chứng minh tính đúng của thuật toán đệ quy Ta sẽ chứng minh tính đúng của thuật toán đệ quy bằng phương pháp quy nạp theo kích thước dữ liệu vào như sau: − Cơ sở của quy nạp: Trường hợp suy biến của đệ quy Đây cũng chính là điều kiện phải có để thuật toán có tính dừng − Giả thiết quy nạp: Giả sử thuật toán đúng với dữ liệu kích thước n − Tổng quát: Chứng minh thuật toán đúng với dữ liệu... toán học để chứng minh tính đúng của thuật toán sẽ được trình bày cụ thể sau đây b) Chứng minh tính đúng của thuật toán bằng phương pháp quy nạp Các thuật toán nếu chỉ có các dòng lệnh đơn lẻ không có chứa đệ quy hay lặp thì ta dễ dàng thấy được tính đúng của nó nhưng với các thuật toán có chứa đệ quy hay vòng lặp thì việc chứng minh trở nên phức tạp hơn Sau đây ta sử dụng phương pháp quy nạp toán học... khẳng định được ngay là thuật toán đó có đúng hay không Ở chương này nghiên cứu tổng quan về các chiến lược chứng minh tính đúng của thuật toán Nghiên cứu chi tiết về chiến lược chứng minh tính đúng của thuật toán một cách trực tiếp dựa vào toán học mà không cần chạy các bộ test chương trình cụ thể 2.1 Các chiến lược chứng minh tính đúng thuật toán Để kiểm tra thuật toán có đúng hay không ta có nhiều... cụ thể mà thôi Có một cách khác chứng minh được thuật toán đúng đó là chứng minh bằng toán học Nhưng với cách chứng minh thuật toán đúng bằng toán học thì phức tạp hơn nhiều và đòi hỏi nhiều kiến thức tổng hợp cả về toán học và tin học cộng với khả năng của người thực hiện việc chứng minh thuật toán Chúng ta sẽ nghiên cứu việc này cụ thể hơn ở các chương sau 1.3.2 Độ phức tạp thuật toán a) Độ phức tạp... khi thiết kế thuật toán hay lựa chọn thuật toán, lựa chọn ngôn ngữ lập trình để viết chương trình ta cũng phải qua tâm đến những vấn đề này để đạt hiệu quả mong muốn 24 CHƯƠNG 2 MỘT SỐ PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG CỦA THUẬT TOÁN Chúng ta đã biết thuật toán là vô cùng quan trọng và có thể nói là thuật toán mang tính chất quyết định để giải một bài toán trên máy tính Nhưng một thuật toán vừa thiết... ra thuật toán sai chứ chưa chứng minh được là nó đúng Tính đúng đắn của thuật toán cần phải được chứng minh bằng toán học Tuy nhiên kiểm thử vẫn được sử dụng phổ biến cho các chương trình 25 trong thực tế, vì các chương trình lớn khó có thể chứng minh hoàn toàn bằng toán học Hiện nay, trong công nghệ phần mềm công đoạn kiểm thử là bắt buộc b) Chứng minh tính đúng (Correctness proof): Với chiến lược chứng. .. toán đúng với dữ liệu kích thước n+1 c) Một số ví dụ Bài toán 2.1 Tính giai thừa Tính giai thừa của một số nguyên dương n cho trước − Input: Số nguyên dương n − Output: n! Thuật toán: Giaithua(n): int; //Hàm đệ quy tính n! 27 if (n = 0) or (n = 1) then return 1 else return (n * Giaithua(n - 1)); End Chứng minh: Chứng minh tính đúng của thuật toán theo phương pháp quy nạp như sau: − Cơ sở quy nạp: Với... tính đúng của thuật toán như: Đối với các thuật toán đệ quy có thể chứng minh tính đúng bằng phương pháp quy nạp Đối với các thuật toán không đệ quy có thể sử dụng phương pháp bất biến vòng lặp cho mọi vòng lặp 2.2.1 Phương pháp quy nạp (induction) a) Phương pháp quy nạp toán học Gọi P(n) là một phát biểu nào đó liên quan đến biến số tự nhiên n (n ≥ n0) Chứng minh bằng quy nạp sẽ gồm các bước sau: −