Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
231,5 KB
Nội dung
ĐỆ QUY VÀ GiẢI THUẬT ĐỆ QUY 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 tố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 tố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! tốn T cịn tính (n-1)! tốn T1 ta thấy T1 dạng với T nhỏ (n-1 < n) Giải thuật đệ quy Giải thuật tố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 cịn trang Khi việc tách đơi ngừng lại tố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 cị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 tố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 cịn trang Trường hợp tố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: Hai tháng sau sinh cặp thỏ sinh cặp thỏ Các thỏ khơng chết 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 tố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ứ ln 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 tố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 đĩa tử cọc A sang cọc B Chuyển n-2 đĩa từ cọc A sang cọc C 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ó tố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 ... 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 tố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 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. .. 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