Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
131,5 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 MỞ ĐẦU Để đá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 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 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 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 Đ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ố 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 Định nghĩa: Thuật toán (Algorithm) để giải toán dãy hữu hạn thao tác xếp theo trình tự xác định, cho sau thực dãy thao tác ấy, từ liệu vào giá trị tập giá trị (input) toán ta nhận giá trị tập giá trị gọi liệu (output) toán 1.1.3 Cấu trúc liệu (Data Structure) 1.1.4 Chương trình (Program) Chương trình = Thuật toán + Cấu trúc liệu Chương trình thể ngôn ngữ lập trình cụ thể thuật toán cho thể cấu trúc liệu xác định Việc lựa chọn cấu trúc liệu phù hợp với thuật toán ngược lại lựa chọn thuật toán phù hợp với cấu trúc liệu cụ thể phụ thuộc vào mục đích chương trình, kỹ người lập trình khả ngôn ngữ lập trình cụ thể 1.2 Một số phương pháp thiết kế thuật toán Ngày có nhiều phương pháp thiết kế thuật toán nghiên cứu sử dụng công nghệ phần mềm Có toán giải thuật toán toán chưa có thuật toán có thuật toán cho lời giải tương đối chấp nhận Trong luận văn nghiên cứu phương pháp thiết kế thuật toán ứng dụng cho toán có thuật toán để giải 1.2.1 Kỹ thuật đệ quy Đệ quy khái niệm toán học tin học Ta nói đối tượng đệ quy định nghĩa qua đối tượng dạng với quy nạp Ý tưởng kỹ thuật đệ quy chia toán cần giải thành nhiều toán nhỏ hơn, việc chia thực toán có lời giải lời giải thường tường minh tương đối đơn giản Khái niệm giải thuật đệ quy: Một toán T thực giải thuật toán T’ có dạng giống T giải thuật gọi giải thuật đệ quy Bài toán T’ có dạng giống toán T T’ theo nghĩa phải toán nhỏ T Bài toán T’ phải dễ giải toán T việc giải toán T’ không cần dùng đến T 1.2.2 Phương pháp chia để trị (Divide and Conquer) Phương pháp chia để trị có tư tưởng chia toán ban đầu thành toán tương tự Các toán tiếp tục chia nhỏ hơn, chia liên tiếp gặp toán có lời giải dễ dàng đưa lời giải Sau giải toán kết hợp kết lại với ta thu kết cần tìm toán ban đầu 1.2.3 Phương pháp quay lui (Backtracking) Tư tưởng thuật toán quay lui tìm nghiệm toán cách xem xét tất phương án Ta thử duyệt phương án tìm thấy phương án gọi phương pháp thử sai Với tốc độ xử lí nhanh máy vi tính phương pháp giải nhiều toán nhiên kích thước toán lớn trở nên không phù hợp Bởi kích thước − Từ bảng phương án suy nghiệm toán ban đầu cần giải 1.2.6 Phương pháp tham lam (Greedy Method) Tư tưởng phương pháp tham lam sau: Ta xây dựng thành phần nghiệm Giả sử ta xây dựng k thành phần véc tơ nghiệm ( x1 , x , , x k ) , nhiệm vụ phải xây dựng thành phần thứ k+1 tức tìm x k+1 Lúc thành phần x k+1 lựa chọn theo tiêu chí tốt theo hàm f(X) tập ứng cử viên Sk để ( x1 , x , , x k , x k+1 ) Cứ tiếp tục xây dựng hết thành phần nghiệm X Với cách làm có số toán xây dựng hàm f(X) thích hợp tìm nghiệm tối ưu Còn phần nhiều toán ta tìm nghiệm gần với nghiệm tối ưu sử dụng thuật toán tham lam 1.3 Phân tích thuật toán Phân tích thuật toán gồm nhiều vấn đề phân tích tính đúng, tính hiệu quả, độ phức tạp thuật toán 1.3.1 Tính đắn thuật toán Thiết kế xong thuật toán câu hỏi luôn phải có thuật toán thiết kế chưa? Cách đơn giản mà sử dụng thông dụng viết chương trình cho thuật toán thiết kế chạy thử chương trình với nhiều liệu vào cụ thể (tests) để kiểm tra liệu có chuẩn xác hay chưa Tuy nhiên, cách khẳng định thuật toán với trường hợp cụ thể mà Có cách khác chứng minh thuật toán chứng minh toán học Nhưng với cách chứng minh thuật toán toán học phức tạp nhiều đòi hỏi nhiều kiến thức tổng hợp toán học tin học cộng với khả người thực việc chứng minh thuật toán Chúng ta nghiên cứu việc cụ thể chương sau 10 1.3.2 Độ phức tạp thuật toán a) Độ phức tạp mặt thời gian b) Độ phức tạp mặt không gian 11 CHƯƠNG 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 vô quan trọng nói thuật toán mang tính chất định để giải toán máy tính Nhưng thuật toán vừa thiết kế xong chưa thể khẳng định thuật toán có hay không Ở chương nghiên cứu tổng quan chiến lược chứng minh tính thuật toán Nghiên cứu chi tiết chiến lược chứng minh tính thuật toán cách trực tiếp dựa vào toán học mà không cần chạy test chương trình cụ thể 2.1 Các chiến lược chứng minh tính thuật toán Để kiểm tra thuật toán có hay không ta có nhiều chiến lược kiểm thử, chứng minh tính kết hợp kiểm thử chứng minh tính chiến lược có ưu, nhược điểm riêng Sau số đặc điểm sơ lược chiến lược a) Kiểm thử (Testing): b) Chứng minh tính (Correctness proof): 12 Với chiến lược chứng minh tính thuật toán cần dùng kiến thức toán học để chứng minh thuật toán Cách chứng minh cho toán tổng quát đòi hỏi tư trừu tượng logic toán học chặt chẽ Có phương pháp 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 nội dung nghiên cứu chủ yếu thực luận văn c) Kết hợp kiểm thử chứng minh tính đúng: Để đảm bảo tính thuật toán cách chặt chẽ ta kết hợp hai chiến lược kiểm thử chứng minh tính nêu 2.2 Các phương pháp chứng minh tính (Correctness proofs) Làm để biết thuật toán hoạt động nào? Cách tốt chứng minh thuật toán Có số phương pháp chứng minh tính thuật toán như: Đối với thuật toán đệ quy chứng minh tính phương pháp quy nạp Đối với thuật toán không đệ quy 13 sử dụng phương pháp bất biến vòng lặp cho 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 b) Chứng minh tính thuật toán phương pháp quy nạp Các thuật toán có dòng lệnh đơn lẻ chứa đệ quy hay lặp ta dễ dàng thấy tính với thuật toán có chứa đệ quy hay vòng lặp việc chứng minh trở nên phức tạp Sau ta sử dụng phương pháp quy nạp toán học nêu để chứng minh tính thuật toán đệ quy Ta chứng minh tính thuật toán đệ quy phương pháp quy nạp theo kích thước liệu vào sau: − Cơ sở quy nạp: Trường hợp suy biến đệ quy Đây điều kiện phải có để thuật toán có tính dừng 14 − Giả thiết quy nạp: Giả sử thuật toán với liệu kích thước n − Tổng quát: Chứng minh thuật toán với liệu kích thước n+1 c) Một số ví dụ 2.2.2 Phương pháp bất biến vòng lặp (loop invariant) a) Chứng minh tính thuật toán phương pháp bất biến vòng lặp Chứng minh tính thuật toán lặp phương phương pháp bất biến vòng lặp có đặc điểm sau: Bất biến vòng lặp biểu thức logic (của biến sử dụng vòng lặp) có giá trị không đổi trình lặp Tại thời điểm thuật toán có vòng lặp, có vòng lặp lồng phải vòng lặp bên Sau vòng lặp bất biến vòng lặp trả lại kết phải trì vòng lặp tiếp theo.Sử dụng bất biến vòng lặp để thuật toán lặp có tính dừng Thông qua kết thúc điều kiện chứng minh thuật toán cho kết 15 b) Các đặc trưng bất biến vòng lặp − Khởi tạo: bất biến vòng lặp phải trước lần lặp − Duy trì: Nếu bất biến vòng lặp trước vòng lặp bất biến vòng lặp trước vòng lặp − Kết thúc: Khi vòng lặp kết thúc, bất biến vòng lặp cho tính chất hữu ích giúp chứng minh thuật toán đắn c) Một số ví dụ 16 CHƯƠNG ỨNG DỤNG CHỨNG MINH TÍNH ĐÚNG CỦA MỘT SỐ THUẬT TOÁN Việc chứng minh tính thuật toán toán học đòi hỏi nhiều kiến thức tổng hợp Ở chương nhằm nghiên cứu chứng minh số thuật toán kinh điển với ứng dụng việc giải toán thực tế Mặc dù thuật toán kinh điển đời từ lâu cải tiến đưa vào sử dụng nhiều phần mềm Vì để tìm bất biến vòng lặp để chứng minh thuật toán vấn đề khó nên sau nghiên cứu toán thuật toán sử dụng phương pháp bất biến vòng lặp: 3.1 Bài toán: Dãy đơn điệu tăng dài Cho dãy gồm n số nguyên a1, a2, , an Tìm dãy đơn điệu tăng có độ dài lớn dãy số (các phần tử không liền kề phải giữ nguyên thứ tự ban đầu) Nhận xét: Tất dãy dãy số n phần tử ban đầu 2n Do phương pháp duyệt tất dãy lựa chọn dãy phù hợp thực n lớn không gian duyệt lớn Do ta lựa chọn phương pháp quy 17 hoạch động nhằm tiết kiệm không gian nhớ chi phí thời gian để giải toán cho 3.2 Bài toán: Chia kẹo Có n gói kẹo, gói kẹo thứ i chứa a[i] kẹo, đưa cách chia gói kẹo thành phần cho độ lệch số kẹo hai phần − Input: Dữ liệu vào từ tệp ChiaKeo.INP + Dòng đầu số gói kẹo n + Dòng thứ hai số kẹo gói − Output: Dữ liệu tệp ChiaKeo.OUT + Số gói kẹo phần sau chia 3.3 Bài toán Cây bao trùm nhỏ (Minimum spanning tree) Bài toán: Cho đồ thị vô hướng có trọng số G=(V,E,w) Gọi T bao trùm G, w(T) trọng số bao trùm T Trọng số bao trùm T tổng trọng số cạnh T Trong đồ thị có nhiều bao trùm, vấn đề đặt cần tìm bao trùm có trọng số nhỏ hay gọi bao trùm nhỏ 18 − Input: Đồ thị vô hướng có trọng số G=(V,E,w) − Output: Cây bao trùm nhỏ T đồ thị G Ta sử dụng phương pháp tham lam để thiết kế thuật toán sau: Sau hai thuật toán tham lam kinh điển dùng để giải toán bao trùm nhỏ đồ thị vô hướng có trọng số Thuật toán Kruskal: Thuật toán xuất lần Joseph Kruskal năm 1956 Ý tưởng thuật toán Kruskal để tìm bao trùm nhỏ đồ thị vô hướng có trọng số G=(V,E,w) khởi tạo T cạnh nào, sau duyệt danh sách cạnh đồ thị từ cạnh có trọng số nhỏ đến cạnh có trọng số lớn, xét tới cạnh việc thêm cạnh vào T mà không tạo thành chu trình đơn thêm cạnh vào T Việc lặp lặp lại khi: + Hoặc kết nạp |V|-1 cạnh vào T T bao trùm nhỏ nhất; 19 + Hoặc duyệt hết danh sách cạnh mà chưa kết nạp đủ |V|-1 cạnh kết luận đồ thị không liên thông không tồn bao trùm Như để thực thuật toán Kruskal danh sách cạnh xếp ngẫu nhiên mà phải xếp thành dãy không giảm Thêm phải kiểm tra xem việc thêm vào cạnh có tạo thành chu trình đơn hay không Thuật toán Prim (1957): Thuật toán Kruskal có hiệu đồ thị có số cạnh (còn gọi đồ thị thưa) trở nên hiệu số cạnh đồ thị nhiều (còn gọi đồ thị dày) thời gian xếp cạnh lớn nhiều Khi đồ thị dày có thuật toán hiệu thuật toán Prim Ý tưởng thuật toán Prim: Ban đầu ta khởi tạo T gồm đỉnh đỉnh đồ thị Sau tìm dần đỉnh cách chọn đỉnh gần T tức có khoảng cách đến T nhỏ Khi ta kết nạp đỉnh cạnh nhỏ tương ứng vào T Quá trình lặp lặp lại thỏa mãn điều kiện sau đây: 20 + Hoặc kết nạp đủ n đỉnh vào T, T bao trùm nhỏ cần tìm + Hoặc chưa kết nạp đủ n đỉnh không cạnh nối đỉnh T với đỉnh T Khi đồ thị cho đồ thị không liên thông không tồn bao trùm Kết luận đồ thị không tồn bao trùm nhỏ 21 KẾT LUẬN Bản luận văn trình bày số vấn đề thiết kế phân tích thuật toán Tập trung sâu tìm hiểu hệ thống hóa vấn đề liên quan tới hai phương pháp chứng minh tính thuật toán Đó là, phương pháp chứng minh tính thuật toán quy nạp áp dụng cho thuật toán đệ quy phương pháp chứng minh tính thuật toán bất biến vòng lặp áp dụng cho thuật toán có chứa vòng lặp Áp dụng hai phương pháp để chứng minh tính cho thuật toán giải số toán cụ thể, bao gồm: - Chứng minh tính cho thuật toán quy hoạch động giải toán tìm dãy đơn điệu tăng dài dãy số Và toán có tính ứng dụng toán toán bắc cầu - Chứng minh tính cho thuật toán quy hoạch động giải toán kẹo với tư tưởng sử dụng thuật toán quy hoạch động tìm dãy có tổng S 22 - Chứng minh tính cho thuật toán tham lam giải toán bao trùm nhỏ với hai thuật toán Kruskal Prim Trong khuôn khổ luận văn, với thời gian hạn chế đạt việc tìm hiểu vận dụng hai phương pháp chứng minh tính vào số toán kinh điển, có tính phổ biến Đề tài phát triển theo hướng nghiên cứu phương pháp khác chứng minh tính thuật toán áp dụng phương pháp thuật toán cho nhiều toán khác, đặc biệt thuật toán có tính phức tạp kết hợp nhiều kĩ thuật thiết kế thuật toán… Mặc dù thân cố gắng việc tìm tòi, nghiên cứu giúp đỡ nhiệt tình cô giáo hướng dẫn thời gian hạn chế công tác luận văn khó tránh khỏi thiếu sót Kính mong đóng góp ý kiến thầy cô bạn 23 [...]... hiểu và hệ thống hóa các vấn đề liên quan tới hai phương pháp chứng minh tính đúng của thuật toán Đó là, phương pháp chứng minh tính đúng của thuật toán bằng quy nạp áp dụng cho các thuật toán đệ quy và phương pháp chứng minh tính đúng của thuật toán bằng bất biến vòng lặp áp dụng cho các thuật toán có chứa vòng lặp Áp dụng hai phương pháp trên để chứng minh tính đúng cho các thuật toán giải một số bài... 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 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 13 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 b) Chứng minh tính đúng của thuật toán bằng phương pháp. .. 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 chiến lược như kiểm thử, chứng minh tính đúng hoặc kết hợp cả kiểm thử và chứng minh tính đúng nhưng... vẫn còn đúng trước vòng lặp tiếp theo − Kết thúc: Khi vòng lặp kết thúc, bất biến vòng lặp này cho chúng ta một tính chất hữu ích giúp chứng minh được thuật toán là đúng đắn c) Một số ví dụ 16 CHƯƠNG 3 ỨNG DỤNG CHỨNG MINH TÍNH ĐÚNG CỦA MỘT SỐ THUẬT TOÁN Việc chứng minh tính đúng của thuật toán bằng toán học đòi hỏi nhiều kiến thức tổng hợp Ở chương này nhằm nghiên cứu và chứng minh một số thuật toán kinh... là một số đặc điểm sơ lược về mỗi chiến lược a) Kiểm thử (Testing): b) Chứng minh tính đúng (Correctness proof): 12 Với chiến lược 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. .. bài toán cụ thể, bao gồm: - Chứng minh tính đúng cho thuật toán quy hoạch động giải bài toán tìm dãy con đơn điệu tăng dài nhất của dãy số Và một bài toán có tính ứng dụng của bài toán này đó là bài toán bắc cầu - Chứng minh tính đúng cho thuật toán quy hoạch động giải bài toán cái kẹo với tư tưởng sử dụng thuật toán quy hoạch động tìm dãy con có tổng bằng S 22 - Chứng minh tính đúng cho thuật toán. .. giải bài toán cây bao trùm nhỏ nhất với hai thuật toán Kruskal và Prim Trong khuôn khổ của luận văn, với thời gian hạn chế chúng tôi mới chỉ đạt được việc tìm hiểu và vận dụng hai phương pháp chứng minh tính đúng vào một số bài toán kinh điển, có tính phổ biến Đề tài có thể phát triển theo hướng nghiên cứu các phương pháp khác trong chứng minh tính đúng của thuật toán và áp dụng các phương pháp đối... 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 đã 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... nhiên, cách này cũng chỉ khẳng định được thuật toán đúng với các trường hợp 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... 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à 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