Nội dung chương 2 của Bài giảng Cấu trúc dữ liệu và giải thuật cung cấp cho sinh viên các kiến thức về đệ quy và giải thuật đệ quy. Tham khảo nội dung bài giảng để nắm bắt nội dung chi tiết.
BÀI GIẢNG CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Trần Đăng Hưng Khoa CNTT - ĐHSPHN Nội dung Chương 1: Giới thiệu Chương 2: Đệ quy Giải thuật đệ quy Chương 3: Quy hoạch động Chương 4: Danh sách móc nối Chương 5: Stack Queue Chương 6: Cây Ứng dụng Chương 7: Đồ thị Ứng dụng Chương 8: Các thuật toán xếp Chương 9: Các thuật tốn tìm kiếm CTDL> - Trần Đăng Hưng September 2015 Nội dung Chương 1: Giới thiệu Chương 2: Đệ quy Giải thuật đệ quy Chương 3: Quy hoạch động Chương 4: Danh sách móc nối Chương 5: Stack Queue Chương 6: Cây Ứng dụng Chương 7: Đồ thị Ứng dụng Chương 8: Các thuật toán xếp Chương 9: Các thuật tốn tìm kiếm CTDL> - Trần Đăng Hưng September 2015 Đệ quy Mơt đối tượng đệ quy định nghĩa qua đối tượng khác dạng với Ví dụ: Hình ảnh phát viên ngồi hình, … Trong tốn học gặp nhiều cơng thức dạng đệ quy Ví dụ: Tính N!, Tìm USCLN,… CTDL> - Trần Đăng Hưng September 2015 Giải thuật đệ quy Lời giải toán P gọi đệ quy thực thơng qua lời giải tốn P’ dạng với P’ thường nhỏ P việc giải P’ không cần dùng đến P Hàm đệ quy gồm hai phần: Phần neo: Được thực lời giải đơn giản, tìm mà khơng cần đến toán Phần đệ quy: Khi tốn chưa giải phần neo, xác định toán gọi đệ quy giải tốn này, có lời giải tốn phối hợp lại để lời giải Phần đệ quy thể tính quy nạp, phần neo thể hữu hạn giải thuật Sau số lần gọi đệ quy tiến đến phần neo CTDL> - Trần Đăng Hưng September 2015 Ví dụ giải thuật đệ quy (1/2) Tìm ước số chung lớn số nguyên dương Tính giai thừa: CTDL> - Trần Đăng Hưng September 2015 Ví dụ giải thuật đệ quy (2/2) Dãy số fibonaxi (bài toán sinh sản Thỏ) CTDL> - Trần Đăng Hưng September 2015 Trò chơi Tháp Hà Nội (1/2) Có n đĩa, cọc, ban đầu tất đĩa xếp cọc, cần di chuyển số đĩa sang cọc khác theo nguyên tắc: CTDL> - Trần Đăng Hưng September 2015 Trò chơi Tháp Hà Nội (2/2) CTDL> - Trần Đăng Hưng September 2015 Đệ quy hỗ tương Việc gọi hàm không tự gọi mà cịn có gọi đến hàm khác, hàm có khả gọi lại hàm ban đầu Cứ tạo vòng lặp xen kẽ nhau, tất nhiên dù lặp dạng cần có điểm dừng Ví dụ: 10 CTDL> - Trần Đăng Hưng September 2015 Nhận xét Đệ quy công cụ mạnh để giải toán Thiết kế giải thuật đệ quy thường đơn giản, dễ viết Tuy nhiên, nhược điểm tốn nhớ phải gọi đệ quy nhiều lần, thường không làm việc với liệu lớn Một số thuật tốn khử đệ quy cách sử dụng vòng lặp Đệ quy quy nạp toán học quan hệ chặt chẽ, nên tốn có tính chất quy nạp giải đệ quy Thường dùng đệ quy khơng cịn phương án khác 11 CTDL> - Trần Đăng Hưng September 2015 ĐỆ QUY QUAY LUI (Backtracking) 12 CTDL> - Trần Đăng Hưng September 2015 Giới thiệu Thực tế có nhiều tốn cần trả lời câu hỏi dạng Có khả năng…? Có tồn hay khơng khả năng…? … Kỹ thuật quay lui kỹ thuật sử dụng để tìm nghiệm tốn có khơng gian nghiệm lớn cách thử-sai loại bỏ khả Thông thường, ứng viên nghiệm tốn có dạng x = (x1, x2, x3,…, xn); xi thành phần thứ i Ý tưởng thuật toán quay lui: sinh tất khả có nghiệm kiểm tra khả xem có thoả mãn điều kiện tốn khơng 13 CTDL> - Trần Đăng Hưng September 2015 Thuật toán quay lui G/s nghiệm tốn có dạng véc-tơ: x = (x1, x2,…,xn) Ý tưởng xây dựng nghiệm: véc-tơ nghiệm xây dựng cách xây dựng phần tử, phần tử chọn cách thử khả phần tử Cụ thể, bước thực hiện: Xét tất giá trị x1 nhận, thử cho x1 nhận giá trị đó, với giá trị thử gán cho x1 thì: Xét tất giá trị x2 nhận, thử cho x2 nhận giá trị đó, với giá trị thử gán cho x2 thì: …… o Xét tất giá trị xn nhận, thử cho xn nhận giá trị đó, kiểm tra xem nghiệm (x1, x2,…, xn) thời có thỏa mãn ràng buộc khơng Nếu có thơng báo nghiệm 14 CTDL> - Trần Đăng Hưng September 2015 Mơ hình thuật tốn quay lui 15 CTDL> - Trần Đăng Hưng September 2015 MỘT SỐ VÍ DỤ KINH ĐIỂN 16 CTDL> - Trần Đăng Hưng September 2015 Bài toán liệt kê dãy nhị phân Hãy liệt kê tất dãy nhị phân có độ dài n Ví dụ: n = 000 001 010 011 100 101 110 111 17 CTDL> - Trần Đăng Hưng x[i] nhận giá trị 0, đưa dãy x hình September 2015 Bài tốn liệt kê hốn vị Liệt kê tất hoán vị độ dài n Ví dụ: n = 123 132 213 231 312 321 Lưu ý: mảng x để lưu cấu hình tại, cần thêm mảng C để đánh dấu số chọn Vì mảng để số từ 0, nên lời gọi thủ tục Try(0) 18 CTDL> - Trần Đăng Hưng September 2015 Bài toán liệt kê tổ hợp Liệt kê tổ hợp chập k n phần tử Ví dụ: n = 5, k = 123 124 125 234 235 245 345 19 CTDL> - Trần Đăng Hưng Nhận xét: x[1] < x[2] < x[3]