intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Cấu trúc dữ liệu và giải thuật - chương 5

Chia sẻ: Lê Văn Phong Phong | Ngày: | Loại File: PPT | Số trang:27

273
lượt xem
31
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 5 bài giảng cấu trúc dữ liệu và giải thuật của trường ĐHBK TP.HCM. Trình bày ngắn gọn dễ hiểu với những hiệu ứng minh họa sinh động. Để các bạn hiểu rõ hơn về đệ qui là gì? Khái niệm đệ qui có dùng lại chính nó.

Chủ đề:
Lưu

Nội dung Text: Cấu trúc dữ liệu và giải thuật - chương 5

  1. A C CẤU TRÚC DỮ LIỆU VÀ B F GIẢI THUẬT (501040) D E G Chương 5: Đệ qui K H
  2. 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 2 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  3. Tính giai thừa Định nghĩa không đệ qui: n! = n * (n-1) * … * 1 Định nghĩa đệ qui: nếu n=0 n! = 1 nếu n>0 n * (n-1)! Mã C++: int factorial(int n) { if (n==0) return 1; else return (n * factorial(n - 1)); } 3 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  4. 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) n=0 1*factorial(0) … 1 return 1; 1 4 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  5. 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 5 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  6. 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 ỏ 6 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  7. 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 7 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  8. 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
  9. Bài toán Tháp Hà nội – Thi hành 9 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  10. Bài toán Tháp Hà nội – Cây đệ qui 10 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  11. 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. 11 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  12. Cây thi hành và stack hệ thống Cây thi hành 12 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  13. Đệ 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. 13 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  14. Khử đệ qui đuôi hàm giai thừa Giải thuật: product=1 for (int count=1; count < n; count++) product *= count; 14 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  15. Dãy số Fibonacci Định nghĩa: F0 = 0 F1 = 1 Fn = Fn-1 + Fn-2 khi n>2 Ví dụ: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … Hàm đệ qui: int fibonacci (int n) { if (n
  16. Dãy số Fibonacci – Cây thi hành Đã tính rồi 16 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  17. Dãy số Fibonacci – Khử đệ qui Nguyên tắc: Dùng biến lưu trữ giá trị đã tính của Fn-2 Dùng biến lưu trữ giá trị đã tính của Fn-1 Tính Fn = Fn-1 + Fn-2 và lưu lại để dùng cho lần sau Giải thuật: int Fn2=0, Fn1=1, Fn; for (int i = 2; i
  18. Bài toán 8 con Hậu 18 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  19. Bài toán 4 con Hậu 19 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
  20. Bài toán 8 con Hậu – Giải thuật Algorithm Solve Input trạng thái bàn cờ Output if trạng thái bàn cờ chứa đủ 8 con hậu 1. 1.1. In trạng thái này ra màn hình 2. else 2.1. for mỗi ô trên bàn cờ mà còn an toàn 2.1.1. thêm một con hậu vào ô này 2.1.2. dùng lại giải thuật Solve với trạng thái mới 2.1.3. bỏ con hậu ra khỏi ô này Vét cạn End Solve 20 Chương 5: Đệ qui Khoa Công nghệ Thông tin ĐH Bách Khoa Tp.HCM
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2