Đang tải... (xem toàn văn)
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - ThS. Phạm Thanh An
Chương Đệ quy giải thuật đệ quy Ths Phạm Thanh An Bộ mơn Khoa học máy tính- Khoa CNTT Trường Đại học Ngân hàng TP.HCM LOGO Nội dung Khái niệm đệ quy Giải thuật chương trình đệ quy Thiết kế giải thuật đệ quy Ưu nhược điểm đệ quy Một số dạng giải thuật đệ quy thường gặp Giải thuật đệ qui quay lui (backtracking) Một số tốn giải giải thuật đệ quy điển hình Đệ quy quy nạp toán học Mục tiêu Trang bị cho sinh viên khái niệm cách thiết kế giải thuật đệ qui, giải thuật đệ qui quay lui Giới thiệu số tốn điển hình giải giải thuật đệ qui Phân tích ưu nhược điểm sử dụng giải thuật đệ qui Khái niệm đệ qui Đệ quy: Đưa định nghĩa có sử dụng khái niệm cần định nghĩa( quay về) Ví dụ Người = hai người khác Trong toán học: • Số tự nhiên: số tự nhiên, n số tự nhiên n- số tự nhiên • Hàm n! Khái niệm đệ Giải thuật hàm đệ quy Giải thuật đệ quy Nếu toán T thực lời giải tốn T ’ có dạng giống T lời giải đệ quy Giải thuật tương ứng với lời giải gọi giải thuật đệ quy Hàm đệ quy Giải thuật đệ quy Ví dụ: Xé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 } Phân loại giải thuật đệ qui Đệ quy phân thành loại : Đệ quy trực tiếp: Đệ quy gián tiếp (Tương hỗ): A() B() A() B() C() Cài đặt hàm đệ quy Hàm đệ quy gồm hai phần: Phần sở (Phần neo): Phần đệ quy: Cài đặt hàm đệ quy (tt) Cấu trúc hàm đệ qui sau If (suy biến) ; Else { ; ; ; } Một số dạng giải thuật đệ quy đơn giản thường gặp Đệ quy tuyến tính Hàm đệ qui tuyến tính dạng: P () { } if (điều kiện dừng) { } Else { P(); } Phương pháp quay lui (back tracking) Quan tâm: Làm để xác định tập Tk, tức tập tất khả mà phàn tử thứ k dãy x1, x2, ,xn nhận Khi có tập Tk, để xác định xk, thấy xk phụ thuộc vào số j mà cịn phụ thuộc vào x1, x2, ,xk-1 Bài tốn: Liệt kê tất hoán vị n số tự nhiên Đặt N= {1, 2, ,n} Hoán vị n số tự nhiên x[0], x[1], ,x[n1] Trong x[i] ≠ x[j], ∀i,j x[i] ∈ {0 n-1} T1 = N, giả sử xác định x[0], x[1], , x[k-1] đó, Tk = {1 n}- {x[0], x[1], , x[k-1]} Ghi nhớ tập Tk , k = n-1, ta cần sử dụng mảng b[0 n-1] giá trị 0, cho b[i] = i thuộc Tk Bài toán: Liệt kê tất hoán vị n số tự nhiên Thu(int k){ if (k== n) inkq(); else for (int j=1; j