Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
325 KB
Nội dung
Báo cáo đề tài toán rời rạc Mục luc LỜI MỞ ĐẦU 4 Phần I: GIỚI THIỆU 5 Phần II: ĐỆ QUY VÀ CÁCH KHỬ ĐỆ QUY 6 Chương I: NHỮNG HIỂU BIẾT VỀ ĐỆ QUY 6 1.1 -Khái niệm đệ quy 6 1.1.1 Khái niệm: 6 1.1.2 Phân loại đệ quy: 7 1.2 -Thuật toán đệ quy: 8 1.2.1 Khái niệm : 8 1.2.2 Ví dụ: 10 1.3 Ưu nhược điểm của đệ quy: 10 1.3.1 Ưu điểm: 10 1.3.2 Nhược điểm: 11 Chương II : CHƯƠNG TRÌNH CON ĐỆ QUY 11 2.1 Các phương pháp xây dựng chương trình con đệ quy: 11 2.1.1 Định nghĩa chương trình con đệ quy: 11 2.1.2 Cấu trúc của một chương trình con đệ quy: 11 2.2 Phương pháp xây dựng chương trình con đệ quy: 13 2.3 Cách thực hiện của đệ quy: 16 2.3.2 Hiện thực đơn xử lý: vấn đề vùng nhớ 17 Thuật giải đệ quy 18 3.1-Vấn đề khử đệ quy: 19 3.2 Một số phương pháp khử đệ quy: 20 3.2.1 Khử đệ quy bằng vòng lặp: 20 CHƯƠNG 4: CÀI ĐẶT THUẬT TOÁN SELECTION SORT 31 4.1: Thuật toán selection sort bàng phương pháp đệ quy 31 4.2: Khử đệ quy thuật toán selection sort 31 KẾT LUẬN: 42 TÀI LIỆU THAM KHẢO 42 YÊU CẦU CỦA ĐỀ TÀI: Thuật toán đệ quy và cách khử đệ quy: 1. Trình bày hiểu biết về thuật toán đệ quy, ưu nhược điểm của đệ quy. 2. Các phương pháp xây dựng chương trình con đệ quy, cách thực hiện chương trình đệ quy, cơ chế cấp phát và quản lý bộ nhớ cho chương trình đệ quy. 3. Vấn đề khử đệ quy và một số phương pháp khử đệ quy, có ví dụ minh họa. 4. Cài đặt thuật toán Selectionsort thực hiện việc sắp xếp một dãy n số nguyên theo chiều tăng dần bằng phương pháp đệ quy sau đó khử đệ quy. LỜI MỞ ĐẦU Toán rời rạc là một lĩnh vực của toán học nghiên cứu các đối tượng rời rạc.Chúng ta sẽ sử dụng công cụ rời rạc khi phải đếm các đối tượng, khi nghiên cứu quan hệ giữa các tập rời rạc, khi phân tích các quá trình hữu hạn.Đồng thời tầm quan trọng của toán rời rạc được nâng cao là nhờ việc cất giữ và xử lý thông tin trên máy tính có bản chất là các quá trình rời rạc.Các quá trình rời rạc ấy được xử lý và biểu diễn thông qua các chương trình, các thuật toán cụ thể.Khi nói đến các thuật toán trong toán rời rạc ta không thể không nói đến đệ quy và giải thuật của đệ quy. Đệ quy không những giúp người lập trình giải quyết tốt các bài toán mà còn giúp nâng cao tư duy toán, rèn luyện kỹ thuật lập trình.Tuy rằng bên cạnh giải thuật đệ quy vẫn có những giải thuật lặp khá đơn giản và hữu hiệu,chẳng hạn như giải thuật lặp tính n!. nhưng đệ quy vẫn có vai trò xứng đáng của nó, có những bài toán việc nghĩ ra lời giải đệ quy thuận lợi hơn nhiều so với lời giải lặp và có những giải thuật đệ quy thật sự cũng có hiệu lực cao nữa. Một điều cần nói thêm về đệ quy là: Về mặt định nghĩa công cụ đệ quy đã cho phép xác định một tập vô hạn các đối tượng bằng một phát biểu hữu hạn. Chúng ta sẽ thấy rõ vai trò của công cụ này trong định nghĩa văn phạm, định nghĩa cú pháp ngôn ngữ, định nghĩa một số cấu trúc dữ liệu…Nội dung của bài đề tài được trình bày sau đây sẽ phần nào giúp các bạn hiểu sâu sắc hơn về đệ quy và các giải thuật liên quan tới nó.Trong đề tài này chúng tôi trình bày gồm có 4 chương.Mỗi chương chúng tôi đã cố gắng trình bày ngắn gọn, trực tiếp vào bản chất của vấn đề, đồng thời sử dụng cài đặt tất cả các chương trình bằng ngôn ngữ lập trình pascal,hy vọng sẽ mang lại sự gần gũi, dễ hiểu cho các sinh viên,mong rằng nó sẽ thực sự giúp ích cho các bạn trong quá trình nghiên cứu về đệ quy. Sinh viên nhóm 5 rất cảm ơn các thầy cô giáo trong bộ môn khoa học máy tính đã hướng dẫn chúng em trong quá trình thực hiện đề tài này.Mặc dù rất cố gắng nhưng không tránh khỏi những thiếu sót và hạn chế,rất mong được sự tham gia, đóng góp ý kiến bổ sung của thầy cô và các bạn cho đề tài này. Chúng tôi xin chân thành cảm ơn! Phần I: GIỚI THIỆU Toán học rời rạc là một trong những môn cơ sở được giảng dạy ở các khoa công nghệ thông tin hiện nay.Nhằm đáp ứng thêm nhu cầu đa dạng về kiến thức cho các bạn sinh viên về toán rời rạc,đề tài này chúng tôi nghiên cứu về đệ quy và cách khử đệ quy,đây là bài toán rất nhỏ được sử dụng trong toán rời rạc nhưng khi xét về vai trò thì nó là một phần không thể thiếu của toán rời rạc.Nội dung đề tài chúng tôi trình bày gồm bốn chương, mỗi chương chúng tôi cố gắng trình bày cô đọng các nội dung,cụ thể như: • Chương 1: Sơ lược về đệ quy,qua chương này các bạn sẽ nắm được những khái niệm cơ bản về đệ quy, và phần nào hiểu hơn về nó. • Chương 2: Chương trình con đệ quy và một số vấn đề liên quan đến nó,qua chương này các bạn sẽ hiểu thêm về cách xây dựng và sử dụng các hàm, cũng như các thủ tục của đệ quy. • Chương 3: Chương này chúng tôi trình bày cách khử đệ quy, khử đệ quy ở đây được hiểu là một phương pháp làm mất đi tính đệ quy của một chương trình đệ quy.Giải thuật này cũng mang một ý nghĩa hết sức quan trọng trong quá trình giải các bài toán liên quan. • Chương 4: Chương này chúng tôi cài đăt một bài toán ví dụ giúp các bạn hiểu thêm một cách sâu sắc hơn về những gì chúng tôi đã nêu ở trên. Nói một cách tổng quát, qua bài đề này chúng tôi mong giúp cho mọi người hiểu một cách sâu sắc hơn về đệ quy, và từ đó áp dụng thành thạo nó trong việc giải quyết các bài toán có liên quan. ********************************** Phần II: ĐỆ QUY VÀ CÁCH KHỬ ĐỆ QUY Chương I: NHỮNG HIỂU BIẾT VỀ ĐỆ QUY 1.1 -Khái niệm đệ quy 1.1.1 Khái niệm: Đệ quy là một khái niệm tồn tại trong cuộc sống, trong toán học cũng như trong lập trình. Đệ quy cho một phương pháp ngắn gọn và sáng sủa để mô tả các đối tựơng cũng như một số quá trình. Như vậy đệ quy là một phương pháp xác định tập hợp các đối tượng thỏa mãn một yêu cầu nào đó. Một đối tượng được gọi là đệ quy nếu nó bao gồm chính nó như một bộ phận hoặc đối tượng được định nghĩa dưới dạng của chính nó. • Ví dụ về đệ quy: -Ví dụ 1: Đặt 2 chiếc gương cầu đối diện nhau. Trong chiếc gương thứ nhất chứa hình chiếc gương thứ hai, trong chiếc gương thứ hai chứa hình chiếc gương thứ nhất nên tất nhiên nó chứa lại hình ảnh của chính nó trong chiếc gương thứ nhất… Ở một góc nhìn hợp lý ta có thể thấy một dãy ảnh vô hạn của hai chiếc gương. -Ví dụ 2: Trên vô tuyến truyền hình có lúc ta thấy có những hình ảnh đệ quy như sau: phát thanh viên ngồi bên máy vô tuyến truyền hình, trên màn hình của máy này lại có chính hình ảnh của phát thanh viên ấy ngồi bên máy vô tuyến và cứ như thế…. -Ví dụ 3: Hàm n! được định nghĩa là: • 0! = 1; • Nếu n > 0 thì n! = n ( n – 1 )!; Giả sử ta tính 5! Theo định nghĩa trên ta có: 5! = 5 x 4! = 5 x ( 4 x 3! ) = 5 x ( 4 x ( 3 x 2! ) = 5 x ( 4 x ( 3 x ( 2 x 1! ) ) ) = 5 x ( 4 x ( 3 x ( 2 x ( 1 x 0! ) ) ) ) = 5 x ( 4 x ( 3 x (2 x 1) ) ) =120. Việc tính toán trên minh họa bản chất của cách mà đệ quy thực hiện. Để có được câu trả lời cho một bài toán lớn, phương pháp chung là giảm bài toán lớn thành một hoặc nhiều bài toán con có bản chất tương tự mà kích thước nhỏ hơn. Sau đó cũng chính phương pháp chung này lại được sử dụng cho những bài toán con, cứ như thế đệ quy sẽ tiếp tục cho đến khi kích thước của bài toán con đã giảm đến một kích thước nhỏ nhất nào đó của một vài trường hợp cơ bản,mà lời giải của chúng có thể có được một cách trực tiếp không cần đến đệ quy nữa. Nói cách khác: Mọi quá trình đệ quy gồm có hai phần: • Một vài trường hợp cơ bản nhỏ nhất có thể được giải quyết mà không cần đệ quy. • Một phương pháp chung có thể giảm một trường hợp thành một hoặc nhiều trường hợp nhỏ hơn,và nhờ đó việc giảm nhỏ vấn đề có thể tiến triển cho đến kết quả cuối cùng là các trường hợp cơ bản. 1.1.2 Phân loại đệ quy: Người ta phân đệ quy làm hai loại: + Đệ quy trực tiếp. + Đệ quy gián tiếp. * Đệ quy trực tiếp: là loại đệ quy mà đối tượng được mô tả trực tiếp qua nó: A mô tả qua A, B, C… Trong đó B, C không chứa A Ví dụ: 1. Mô tả đệ quy cây gia phả: gia phả của một người bao gồm người đó và gia phả của cha và gia phả của mẹ. 2. Mô tả đệ quy thủ tục chọn hoa hậu: + Chọn hoa hậu của từng khu vực + Chọn hoa hậu của các hoa hậu. * Đệ quy gián tiếp: Là loại đệ quy mà đối tượng được được mô tả gián tiếp qua nó: A mô tả qua A 1, A 2,…., A n. Trong đó có một A i được mô tả qua A. Ví dụ: Mô tả dạng tổng quát một chương trình viết trên ngôn ngữ lập trình pascal: Một chương trình pascal gồm: • Đầu chương trình ( head ) gồm : program tên; • Thân chương trình ( blok ) gồm: + Khai báo unit, định nghĩa hàm,nhãn, kiểu dữ liệu, khai báo biến. + Định nghĩa các chương trình con - Đầu chương trình con: *procedure tên thủ tục ( danh sách thông số hình thức ); *Function tên hàm ( danh sách tham số hình thức) : kiểu; - Thân chương trình con ( blok ) - Dấu ‘ ; ‘ + Phần lệnh: Là một lệnh ghép dạng: Begin S 1; S 2; …;S n End; • Dấu kết thúc chương trình ‘ . ‘ 1.2 -Thuật toán đệ quy: 1.2.1 Khái niệm : Một thuật toán được gọi là đệ quy nếu nó giải quyết bài toán bằng cách rút gọn liên tiếp bài toán ban đầu tới bài toán cũng như vậy nhưng có dữ liệu đầu vào nhỏ hơn .Tức là nếu lời giải của bài toán T được thực hiện bởi lời giải của một bài toán T’ có dạng như T thì nó là một lời giải đệ quy, khi đó giải thuật chứa lời giải đệ quy được gọi là giải thuật đệ quy hay thuật toán đệ quy ( T’<T ). * Định nghĩa một hàm đệ quy hay thủ tục đệ quy gồm hai phần: - Phần neo ( anchor ): phần này được thực hiện khi mà công việc quá đơn giản có thể giải trực tiếp chứ không cần phải nhờ đến một bài toán con nào cả - Phần đệ quy: Trong trường hợp bài toán chưa thể giải được bằng phần neo, ta xác định những bài toán con và gọi đệ quy giải các bài toán con đó. Khi đã có lời giải( đáp số ) của những bài toán rồi thì phối hợp chúng lại để giải bài toán đang quan tâm. Phần đệ quy thể hiện tính quy nạp của lời giải. Phần neo cũng rất quan trọng bởi nó quy định tới tính hữu hạn dừng của lời giải. * Nói một cách tổng quát một giải thuật đệ quy được biểu diễn như một bộ P gồm mệnh đề S ( không chứa yếu tố đệ quy ) và P: P ≡ P [ S , P ]. Thực thi giải thuật đệ quy có thể dẫn tới một tiến trình gọi đệ quy không kết thúc khi đó không có khả năng gặp trường hợp neo, vì vậy quan tâm đến điều kiện dừng của một giải thuật đệ quy luôn được đặt ra. Để kiểm soát quá trình gọi đệ quy của giải thuật đệ quy P người ta thường gắn thao tác gọi P với việc kiểm tra một điều kiện B xác định và biến đổi qua mỗi lần gọi P, quá trình gọi P sẽ dừng khi P không còn thỏa mãn. Mô hình tổng quát của một giải thuật đệ quy với sự quan tâm đến điều kiện dừng sẽ là: P ≡ if B then P [ S, P ] hoặc P ≡ P [ S, if B then P ] Thông thường với giải thuật đệ quy P để đảm bảo P sẽ dừng sau n lần gọi ta chọn B là ( n > 0). Mô hình giải thuật đệ quy khi đó có dạng: P ( n ) ≡ if ( n > 0 ) then P [ S , P ( n -1 ) ]; hoặc P ( n ) ≡ P [ S , if ( n > 0) then P ( n – 1 ) ] ; Trong các ứng dụng thực tế số lần gọi đệ quy ( độ sâu đệ quy ) không những phải hữu hạn mà còn phải đủ nhỏ, bởi vì mỗi lần gọi đệ quy sẽ cần một vùng nhớ mới trong khi vùng nhớ cũ vẫn phải duy trì. 1.2.2 Ví dụ: • Xét bài toán tìm một từ trong từ điển : Ta có thuật toán dưới dạng giả mã như sau: BEGIN IF ( từ điển chỉ có một trang ) THEN ( tìm từ trong trang này ) ELSE BEGIN + ( chia đôi từ điển ); + ( xác định xem nửa nào của từ điển chứa từ cần tìm) IF ( từ đó nằm ở nửa trước của từ điển ) THEN ( tìm từ đó trong nửa trước ) ELSE ( tìm từ đó trong nửa sau ); END; END. Ta thấy sau mỗi lần từ điển được tách đôi thì một nửa thích hợp sẽ lại được tìm kiếm bằng một cách như đã dùng trước đó. Có một trường hợp đặc biệt, khác với mọi trường hợp trước, sẽ đạt được sau nhiều lần tách đôi, đó là trường hợp từ điển chỉ còn duy nhất một trang. Lúc đó việc tách đôi ngừng lại và bài toán đã đủ nhỏ để ta có thể giải quyết trực tiếp bằng cách tìm từ mong muốn trên trang đó, chẳng hạn bằng cách tìm tuần tự. Trường hợp đặc biệt này gọi là trường hợp suy biến. 1.3 Ưu nhược điểm của đệ quy: 1.3.1 Ưu điểm: • Công cụ mạnh, diễn đạt tư duy rất rõ ràng, chặt chẽ. • Ngắn gọn, có khả năng định nghĩa một tập hợp rất lớn các đối tượng bằng một số các câu lệnh hữu hạn. • Làm chương trình trông đẹp mắt, dễ đọc, dễ hiểu và chương trình được nêu bật rõ ràng hơn. [...]... giải thuật một bài toán có tính đệ quy bằng phương pháp đệ quy ta cần thực hiện tuần tự 3 nội dung sau: • Thông số hóa bài toán Tìm các trường hợp neo cùng giải thuật giải tương ứng Tìm giải thuật giải trong trường hợp tổng quát bằng phân rã bài toán theo kiểu đệ quy Thông số hoá bài toán Tổng quát hóa bài toán cụ thể cần giải thành bài toán tổng quat (một họ các bài toán chúa bài toán cần giải), tìm... quy trực tiếp : tương tự với hai lần gọi trực tiếp (các bạn có thể tham khảo thêm) CHƯƠNG 4: CÀI ĐẶT THUẬT TOÁN SELECTION SORT 4.1: Thuật toán selection sort bàng phương pháp đệ quy 4.2: Khử đệ quy thuật toán selection sort Giải thuật: Ý tưởng của thuật toán Selection Sort hay còn gọi là thuật toán sắp xếp chọn trực tiếp như sau: duyệt dãy N phần tử của danh sách, tìm phần tử nhỏ nhất, đưa phần tử này... các biến điều khiển (trường hợp kích thước bài toán nhỏ nhất), mà giải thuật giải không đệ qui (thường rất đơn giản) Ví dụ: FAC(1)=1, USCLN(a,0)=a • Phân rã bài toán tổng quát theo phương thức đệ quy Tìm phương án (giải thuật) giải bài toán trong trường hợp tổng quat bằng cách phân chia nó thành các thành phần mà hoặc có giải thuật không đệ quy hoặc là bài toán trên nhưng có kích thước nhỏ hơn Ví dụ:... hay điểm kết thúc của bài toán lớn, hoặc sa vào quá nhiểu trường hợp đặc biệt (do chúng chỉ phù hờp vói các bài toán nhỏ) Khi đã có được một bước nhỏ và đơn giản để hướng tới lời giải, hay tự hỏi rằng những khúc mắc còn lại của bài toán có thể được giải quyết bằng cách tương tự hay không, để sủa lại phương pháp của bạn cho tổng quát hơn, nếu cần thiết Ngoại trừ những định nghĩa toán học thể hiện sự đệ... trước đó đã được cất trong ngăn xếp 3.2 Một số phương pháp khử đệ quy: Trong thực tế các bài toán về đệ quy rất phong phú , không phải bài toán đệ quy nào cũng đều có thể đưa về dạng khử đệ quy một cách chuẩn mực Nên việc cài đặt các giải thuật khử đệ quy đòi hỏi phải hiểu rõ được tính chất đệ quy của bài toán, trên cơ sở đó lựa chọn ra giải thuật phù hợp Để thực hiện giải thuật khử đệ quy trong kĩ... cho bài toán tổng quat đặc biệt là nhóm các thông số biểu thị kích thước của bài toán- các thông số điểu khiển (các thông số mà độ lớn của chúng đặc trưng cho độ phức tạp của bài toán, và giảm đi qua mỗi lần gọi đệ quy) Ví dụ: n trong hàm FAC(n); a,b trong hàm USCLN(a,b) • Phát hiện các trường hợp suy biến (neo) và tìm giải thuật cho các trường hợp này Đây là các trường hợp suy biến của bài toán tổng... cứu về phần này chúng ta phải lưu ý câu hỏi về cách thực hiện một chương trình đệ quy trong máy tính cần được tách rời khỏi câu hỏi về sử dụng đệ quy để thiết kế giải thuật Trong giai đoạn thiết kế, chúng ta nên sử dụng mọi phương pháp giải quyết vấn đề mà chúng tỏ ra thích hợp với bài toán, đệ quy là một trong các công cụ hiệu quả và linh hoạt này Trong giai đoạn thực hiện, chúng ta cần tìm xem phương... đồng thời (concurrent) Việc nghiên cứu về xử lý đồng thời và các phương pháp kết nối giữa chúng hiện tại là một đề tài nghiên cứu trong khoa học máy tính, một điều ,chắc chắn là nó sẽ cải tiến cách mà giải thuật sẽ được mô ta và hiện thực trong nhiều năm tới 2.3.2 Hiện thực đơn xử lý: vấn đề vùng nhớ Để xem xét làm cách nào mà đệ quy có thể được thực hiện trong một hệ thống chỉ có một bộ xử lý chúng... gặp trong những chương sau la, khi những bài toán cần được giải quyết trên những cấy trúc dữ liệu mà định nghĩa mang tính chất đệ quy nhu danh sách, chuỗi ký tự biểu diễn biểu thức số học, cây, hay đồ thi… thì giải pháp hướng tới một giải thuật đệ quy là rất dễ nhình thấy • Tìm điều kiện dừng Điều kiện dừng chỉ ra rằng bài toán hoặc một phần nào đó của bài toán đã được giải quyết Điều kiện dừng thường... hợp điểu kiện dừng với bước chính yếu của bài toán, sử dụng lệnh if để chọn lụa giũa chúng Đến đây thì chúng ta có thể viết hàm đệ quy, trong đó mô tá cách mà bước chính yếu được tiến hành cho đến khi gặp được điểu kiện dùng Mỗi lần gọi đệ quy hoặc là phải giải quyết một phần của bài toán khi gặp một trong các điều kiện dừng, hoặc là phải giảm kích thước bài toán hướng dần đến điều kiện dừng • Kiểm tra . MỞ ĐẦU Toán rời rạc là một lĩnh vực của toán học nghiên cứu các đối tượng rời rạc. Chúng ta sẽ sử dụng công cụ rời rạc khi phải đếm các đối tượng, khi nghiên cứu quan hệ giữa các tập rời rạc, khi. và cách khử đệ quy,đây là bài toán rất nhỏ được sử dụng trong toán rời rạc nhưng khi xét về vai trò thì nó là một phần không thể thiếu của toán rời rạc. Nội dung đề tài chúng tôi trình bày gồm bốn. THIỆU Toán học rời rạc là một trong những môn cơ sở được giảng dạy ở các khoa công nghệ thông tin hiện nay.Nhằm đáp ứng thêm nhu cầu đa dạng về kiến thức cho các bạn sinh viên về toán rời rạc ,đề tài