Danh mục

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - ĐH Bách khoa TP. HCM

Số trang: 28      Loại file: pdf      Dung lượng: 655.86 KB      Lượt xem: 7      Lượt tải: 0    
10.10.2023

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài giảng "Cấu trúc dữ liệu và giải thuật - Chương 5: Đệ qui" giới thiệu các khái niệm về đệ qui, tính giai thừa, thi hành hàm tính giai thừa, trạng thái hệ thống khi thi hành hàm tính giai thừa, bài toán Tháp Hà Nội, thiết kế các giải thuật đệ qui, cây thi hành và stack hệ thống, đệ qui đuôi, dãy số Fibonacci, bài toán 8 con Hậu,... Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - ĐH Bách khoa TP. HCM A C BCẤU TRÚC DỮ LIỆU VÀ F GIẢI THUẬT (501040) D E G Chương 5: Đệ qui K H Khái niệm đệ qui Khái niệm (định nghĩa) đệ qui có dùng lại chính nó. Ví dụ: giai thừa của n là 1 nếu n là 0 hoặc là n nhân cho giai thừa của n-1 nếu n > 0 Quá trình đệ qui gồm 2 phần: Trường hợp cơ sở (base case) Trường hợp đệ qui: cố gắng tiến về trường hợp cơ sở Ví dụ trên: Giai thừa của n là 1 nếu n là 0 Giai thừa của n là n * (giai thừa của n-1) nếu n>0ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 2 Tính giai thừa Định nghĩa không đệ qui: n! = n * (n-1) * … * 1 Định nghĩa đệ qui: n! = 1 nếu n=0 n * (n-1)! nếu n>0 Mã C++: int factorial(int n) { if (n==0) return 1; else return (n * factorial(n - 1)); }ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 3 Thi hành hàm tính giai thừa factorial (3) n=3 … factorial (2) n=2 3*factorial(2) … factorial (1) 6 n=1 2*factorial(1) 2 … factorial (0) 1*factorial(0) n=0 1 … return 1; 1ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 4 Trạng thái hệ thống khi thi hành hàm tính giai thừa Stack hệ thống factorial(0) factorial(1) factorial(1) factorial(1) factorial(2) factorial(2) factorial(2) factorial(2) factorial(2) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) t Thời gian hệ thống Trả về từ Trả về từ Trả về từ Trả về từ Gọi hàm Gọi hàm Gọi hàm Gọi hàm hàm hàm hàm hàm factorial(3) factorial(2) factorial(1) factorial(0) factorial(0) factorial(1) factorial(2) factorial(3) tĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 5 Bài toán Tháp Hà nội Luật: Di chuyển mỗi lần một đĩa Không được đặt đĩa lớn lên trên đĩa nhỏĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 6 Bài toán Tháp Hà nội – Thiết kế hàm Hàm đệ qui: Chuyển (count-1) đĩa trên đỉnh của cột start sang cột temp Chuyển 1 đĩa (cuối cùng) của cột start sang cột finish Chuyển count-1 đĩa từ cột temp sang cột finish magicĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 7 Bài toán Tháp Hà nội – Mã C++ void move(int count, int start, int finish, int temp) { if (count > 0) { move(count − 1, start, temp, finish); cout Bài toán Tháp Hà nội – Thi hànhĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 9 Bài toán Tháp Hà nội – Cây đệ quiĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 10 Thiết kế các giải thuật đệ qui Tìm bước chính yếu (bước đệ qui) Tìm qui tắc ngừng Phác thảo giải thuật Dùng câu lệnh if để lựa chọn trường hợp. Kiểm tra điều kiện ngừng Đảm bảo là giải thuật luôn dừng lại. Vẽ cây đệ qui Chiều cao cây ảnh hưởng lượng bộ nhớ cần thiết. Số nút là số lần bước chính yếu được thi hành.ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 11 Cây thi hành và stack hệ thống Cây thi hànhĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 12 Đệ qui đuôi (tail recursion) Định nghĩa: câu lệnh thực thi cuối cùng là lời gọi đệ qui đến chính nó. Khử: chuyển thành vòng lặp.ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 13 Khử đệ qui đuôi hàm giai thừa Giải thuật: product=1 for (int count=1; count < n; count++) product *= count;ĐH ...

Tài liệu được xem nhiều: