DPlease purchase a personal license.CHƯƠNG 2-ĐỆ QUY VÀ GIẢI THUẬT ĐỆ QUY

23 412 0
DPlease purchase a personal license.CHƯƠNG 2-ĐỆ QUY VÀ GIẢI THUẬT ĐỆ QUY

Đ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

Please purchase a personal license CHƯƠNG Khái niệm đệ quy Ta nói đối tượng đệ quy bao gồm phận định nghĩa dạng Ví dụ: Trong toán học ta gặp định nghĩa đệ quy sau: Số tự nhiên: số tự nhiên n số tự nhiên n-1 số tự nhiên Hàm n giai thừa: n! 0! = Nếu n>0 n! = n(n-1)! Giải thuật đệ quy Giải thuật đệ quy Nếu lời giải của toán T giải lời giải toán T1, có dạng giống T, lời giải gọi lời giải đệ quy Giải thuật tương ứng với lời giải đệ quy gọi giải thuật đệ quy Ở T1 có dạng giống T theo nghĩa T1 phải “nhỏ” T Chẳng hạn, với toán tính n!, tính n! toán T tính (n-1)! toán T1 ta thấy T1 dạng với T nhỏ (n-1 < n) Giải thuật đệ quy Giải thuật toán tìm từ từ điển if (từ điển trang) tìm từ trang else { Mở từ điển vào trang “giữa”; Xác định xem nửa từ điển chứa từ cần tìm; if (từ nằm nửa trước) tìm từ nửa trước; else tìm từ nửa sau; } Giải thuật gọi giải thuật đệ quy Giải thuật đệ quy Nhận xét: Sau lần từ điển tách làm đôi nửa thích hợp lại tìm chiến thuật dùng trước (nửa lại tách đôi) Có trường hợp đặc biệt, sau nhiều lần tách đôi, từ điển trang Khi việc tách đôi ngừng lại toán trở thành đủ nhỏ để ta tìm từ mong muốn cách tìm Trường hợp gọi trường hợp suy biến Hàm đệ quy Hàm đệ quy SEARCH(dict, word) //Tìm từ ‘word’ từ điển ‘dict’ { if (Từ điển trang) tìm từ word trang else { mở từ điển vào trang xác định xem nửa từ điển chứa từ word if (từ word nằm nửa sau từ điển) return SEARCH(dict\{nửa trước}, word); else return SEARCH(dict\{nửa sau}, word); } } Hàm đệ quy Đặc điểm hàm đệ quy: Trong hàm đệ quy có lời gọi đến Trong hàm SEARCH có lệnh: return SEARCH(dict\{nửa trước}, word); Sau lần có lời gọi đệ quy kích thước toán thu nhỏ trước Trường hợp suy biến lời gọi hàm SEARCH với từ điển dict trang Trường hợp toán lại giải theo cách khác hẳn (tìm từ word trang cách tìm kiếm tuần tự) việc gọi đệ quy kết thúc Thiết kế giải thuật đệ quy Khi toán xét, liệu xử lý định nghĩa dạng đệ quy, việc thiết kế giải thuật đệ quy tỏ thuận lợi Giải thuật đệ quy phản ánh sát nội dung định nghĩa Không có giải thuật đệ quy vạn cho tất toán đệ quy, nghĩa toán cần thiết kế giải thuật đệ quy riêng Thiết kế giải thuật đệ quy Hàm n! Hàm định nghĩa sau: Nếu n=0 -> n! = Nếu n>0 -> n! = n*(n-1)! Giải thuật đệ quy viết dạng hàm Factorial (n) { if (n==0) return 1; else return n*Factorial(n-1); } Trong hàm lời gọi đến nằm câu lệnh gán sau else Mỗi lần gọi đệ quy đến Factorial, giá trị n giảm Ví du, Factorial(4) gọi đến Factorial(3), gọi đến Factorial(2), gọi đến Factorial(1), gọi đến Factorial(0) trường hợp suy biến, tính theo cách đặc biệt Factorial(0) = Thiết kế giải thuật đệ quy Bài toán dãy số FIBONACCI Dãy số Fibonacci bắt nguồn từ toán cổ việc sinh sản cặp thỏ Bài toán đặt sau: Các thỏ không chết Hai tháng sau sinh cặp thỏ sinh cặp thỏ Khi sinh sản, sau tháng chúng lại sinh cặp Giả sử cặp thỏ sinh ra, hỏi đến tháng thứ n có cặp? Bài toán dãy số FIBONACCI Tính trực tiếp số cặp thỏ tháng Chẳng hạn với n=6, ta tính Tháng thứ 1: cặp (cặp ban đầu) Tháng thứ 2: cặp (cặp ban đầu chưa sinh con) Tháng thứ 3: cặp (đã có thêm cặp cặp ban đầu đầu sinh ra) Tháng thứ 4: cặp (cặp ban đầu sinh thêm) Tháng thứ 5: cặp (cặp bắt đầu sinh) Tháng thứ 6: cặp (cặp sinh tiếp) Bài toán dãy số FIBONACCI Suy định nghĩa cách tính số cặp thỏ Đặt F(n) số cặp thỏ tháng thứ n Ta thấy tháng thứ 1, tháng thứ có cặp, cặp thỏ có tháng thứ n-2 sinh tháng thứ n, nên số cặp thỏ tháng thứ n là: F(n) = F(n-2) + F(n-1) Vì F(n) tính sau: n=1 n=2 F(n) = F(n-2) + F(n-1) n>2 Dãy số F(n) ứng với giá trị n = 1, 2, 3, , có dạng 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 gọi dãy số Fibonacci Bài toán dãy số FIBONACCI Xây dựng giải thuật đệ quy dạng hàm thể việc tính F(n) Fibonaci (n) { if (n2) Ta thấy với trường hợp n đĩa (n>2) coi n-1 đĩa trên, đóng vai trò đĩa thứ xử lý giống trường hợp đĩa được, nghĩa là: Chuyển n-1 đĩa từ cọc A sang cọc B Chuyển đĩa thứ n từ cọc A sang cọc C Chuyển n-1 đĩa từ cọc B sang cọc C A B C Bước A B C Bước A B C Bước A B C Bài toán Tháp Hà Nội Kết luận: Bài toán “Tháp Hà Nội” với n đĩa dẫn đến toán tương tự với kích thước nhỏ hơn, chẳng hạn từ chỗ chuyển n đĩa từ cọc A sang cọc C chuyển n-1 đĩa từ cọc A sang cọc B mức giải thuật lại là: Chuyển n-2 đĩa từ cọc A sang cọc C Chuyển đĩa tử cọc A sang cọc B Chuyển n-2 đĩa từ cọc C sang cọc B trường hợp suy biến xảy ra, trường hợp ứng với toán chuyển đĩa (n=1) Bài toán Tháp Hà Nội Giải thuật đệ quy Chuyen(n, A, B, C) { if (n= =1) chuyển đĩa từ A sang C; else { Chuyen(n-1, A, C, B); Chuyen(1, A, B, C); Chuyen(n-1, B, A, C); } } Hiệu lực đệ quy Đệ quy kỹ thuật giải toán hữu dụng Việc thiết kế giải thuật đơn giản giống với định nghĩa lời giải toán Tuy nhiên: Sử dụng đệ quy tốn nhớ thời gian Nên sử dụng giải thuật lặp thay (khử đệ quy) Vẫn có toán sử dụng đệ quy hữu ích: Giải thuật xếp Quick Sort, Các phép duyệt cây… Bài tập Trong tài liệu [...]... Chuyen(n-1, A, C, B); Chuyen(1, A, B, C); Chuyen(n-1, B, A, C); } } Hiệu lực c a đệ quy Đệ quy là một kỹ thuật giải quy t bài toán khá hữu dụng Việc thiết kế giải thuật cũng đơn giản vì nó khá giống với định ngh a lời giải bài toán Tuy nhiên: Sử dụng đệ quy rất tốn bộ nhớ và thời gian Nên sử dụng giải thuật lặp thay thế nếu được (khử đệ quy) Vẫn có những bài toán sử dụng đệ quy khá hữu ích: Giải thuật sắp... sang cọc C nay là chuyển n-1 đ a từ cọc A sang cọc B và ở mức này thì giải thuật lại là: Chuyển n-2 đ a từ cọc A sang cọc C Chuyển 1 đ a tử cọc A sang cọc B Chuyển n-2 đ a từ cọc C sang cọc B và cứ như thế cho tới khi trường hợp suy biến xảy ra, đó là trường hợp ứng với bài toán chuyển 1 đ a (n=1) Bài toán Tháp Hà Nội Giải thuật đệ quy Chuyen(n, A, B, C) { if (n= =1) chuyển đ a từ A sang C; else {... cách giải tổng quát, trước hết ta xét vài trường hợp đơn giản Trường hợp có 1 đ a: Chuyển đ a từ cọc A sang cọc C A B C Bài toán Tháp Hà Nội Trường hợp 2 đ a: Chuyển đ a thứ nhất từ cọc A sang cọc B Chuyển đ a thứ hai từ cọc A sang cọc C Chuyển đ a thứ nhất từ cọc B sang cọc C A B C Bài toán Tháp Hà Nội Tổng quát với n đ a (n>2) Ta thấy với trường hợp n đ a (n>2) nếu coi n-1 đ a ở trên, đóng vai trò... như đ a thứ nhất thì có thể xử lý giống như trường hợp 2 đ a được, ngh a là: Chuyển n-1 đ a trên từ cọc A sang cọc B Chuyển đ a thứ n từ cọc A sang cọc C Chuyển n-1 đ a từ cọc B sang cọc C A B C Bước 1 A B C Bước 2 A B C Bước 3 A B C Bài toán Tháp Hà Nội Kết luận: Bài toán “Tháp Hà Nội” với n đ a đã được dẫn đến bài toán tương tự với kích thước nhỏ hơn, chẳng hạn từ chỗ chuyển n đ a từ cọc A sang cọc... là dãy số Fibonacci Bài toán dãy số FIBONACCI Xây dựng giải thuật đệ quy dạng hàm thể hiện việc tính F(n) Fibonaci (n) { if (n2 Dãy số F(n) ứng với các giá trị c a n = 1, 2, 3, 4 , ... thuật đệ quy Giải thuật đệ quy Nếu lời giải của toán T giải lời giải toán T1, có dạng giống T, lời giải gọi lời giải đệ quy Giải thuật tương ứng với lời giải đệ quy gọi giải thuật đệ quy Ở T1... tuần tự) việc gọi đệ quy kết thúc Thiết kế giải thuật đệ quy Khi toán xét, liệu xử lý định nghĩa dạng đệ quy, việc thiết kế giải thuật đệ quy tỏ thuận lợi Giải thuật đệ quy phản ánh sát nội... đệ quy vạn cho tất toán đệ quy, nghĩa toán cần thiết kế giải thuật đệ quy riêng Thiết kế giải thuật đệ quy Hàm n! Hàm định nghĩa sau: Nếu n=0 -> n! = Nếu n>0 -> n! = n*(n-1)! Giải thuật đệ quy

Ngày đăng: 21/04/2016, 18:30

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

Tài liệu liên quan