Bài giảng Thuật toán ứng dụng: Tiếp cận chia để trị cung cấp cho người học những kiến thức như: Ý tưởng chia để trị; Bài toán tính giá trị đa thức; Bài toán tháp Hà Nội; Bài toán đếm số dãy con có tổng cho trước; Phân tích về chia để trị; Bài tập. Mời các bạn cùng tham khảo!
THUẬT TOÁN ỨNG DỤNG Tiếp cận Chia để trị Nội dung Ý tưởng chia để trị Bài tốn tính giá trị đa thức Bài toán tháp Hà Nội Bài toán đếm số dãy có tổng cho trước Phân tích chia để trị Bài tập TRƯƠNG XUÂN NAM Phần Ý tưởng chia để trị TRƯƠNG XUÂN NAM Ý tưởng chia để trị TRƯƠNG XUÂN NAM Ý tưởng chia để trị ▪ Bài học từ sống: chia nhỏ bó đũa để dễ bẻ ▪ Ý tưởng bản: chia nhỏ toán lớn thành toán để tìm lời giải dễ dàng ▪ Tính nhanh ab: ▪ ▪ ▪ ▪ Tính x = ab/2 Tính ab = x * x b chẵn Hoặc ab = x * x * a b lẻ Chú ý: chưa phải cách tính nhanh ▪ Sắp xếp trộn: ▪ Chia dãy làm hai dãy ▪ Sắp xếp hai dãy ▪ Trộn hai dãy làm TRƯƠNG XUÂN NAM Ý tưởng chia để trị ▪ Sắp xếp nhanh: ▪ Chọn ngẫu nhiên giá trị m ▪ Chia dãy thành hai nửa: • Một nửa đầu nhỏ m • Một nửa sau lớn m ▪ Sắp xếp nửa đầu ▪ Sắp xếp nửa sau ▪ Tìm kiếm nhị phân: ▪ Chia miền tìm kiếm làm hai ▪ Chọn miền tìm kiếm phù hợp ▪ Gần 100% chia đệ trị đặt tảng lối viết đệ quy TRƯƠNG XUÂN NAM Phần Bài tốn tính giá trị đa thức TRƯƠNG XN NAM Bài tốn tính giá trị đa thức Cho đa thức Pn(x) = a0xn + a1xn-1 + + an-1x + an Nhập giá trị a0, a1, an x, tính giá trị Pn(x) Giải chia để trị: - P0(x) = a0 - Pn(x) = Pn-1(x) * x + an Viết đệ quy? Chuyển đổi tương ứng sang vòng lặp? TRƯƠNG XUÂN NAM Phần Bài toán tháp Hà Nội TRƯƠNG XUÂN NAM Bài tốn tháp Hà Nội ▪ Có cọc gỗ N miếng gỗ trịn có bán kích từ nhỏ đến lớn ▪ Ban đầu tất N miếng gỗ đặt chồng lên cọc số theo thứ tự nhỏ lớn ▪ Hãy chuyển N miếng gỗ sang cọc ▪ Điều kiện: ▪ Mỗi lần di chuyển lấy miếng gỗ từ cọc đặt sang cọc khác ▪ Tại thời điểm: cọc miếng gỗ có bán kính nhỏ miếng gỗ TRƯƠNG XUÂN NAM 10 Bài toán tháp Hà Nội ▪ Tiếp cận chia để trị, chia vấn đề thành vấn đề ▪ Chuyển n miếng từ cọc A qua trung gian B sang cọc C: ▪ Chuyển n-1 miếng từ cọc A qua trung gian C sang cọc B ▪ Chuyển miếng thứ n từ A sang C ▪ Chuyển n-1 miếng từ cọc B qua trung gian A sang cọc C TRƯƠNG XUÂN NAM 11 Phần Bài tốn đếm số dãy có tổng cho trước TRƯƠNG XUÂN NAM 12 Đếm số dãy có tổng cho trước ▪ Cho số nguyên S dãy A = (a1, a2, an-1, an) ▪ Hãy đếm xem có dãy A có tổng phần tử S ▪ Ví dụ: ▪ S=7 ▪ A = (1, 7, 6, 3, 3) ▪ Kết quả: dãy •7=1+3+3 •7=1+6 •7=7 TRƯƠNG XUÂN NAM 13 Đếm số dãy có tổng cho trước ▪ Tiếp cận chia để trị ▪ Hàm đếm số dãy A = (a1, a2, an-1, an) có tổng S F(S, n) ▪ Có hai loại dãy: ▪ Dãy khơng chứa an: • Đếm số dãy A = (a1, a2, an-2, an-1) có tổng S • Chính F(S, n-1) ▪ Dãy có chứa an: • Đếm số dãy A = (a1, a2, an-2, an-1) có tổng S-an • Chính F(S-an, n-1) ▪ Suy ra: F(S, n) = F(S, n-1) + F(S-an, n-1) ▪ Lời giải chậm bùng nổ tổ hợp, cách khác phục? TRƯƠNG XUÂN NAM 14 Phần Phân tích chia để trị TRƯƠNG XUÂN NAM 15 Tóm lược tiếp cận chia để trị ▪ Thông thường gồm bước: ▪ Chia: phân chia vấn đề lớn thành vấn đề nhỏ ▪ Trị: tìm lời giải cho vấn đề • Hoặc tiếp tục chia nhỏ kích cỡ vấn đề lớn • Hoặc tìm lời giải trực tiếp kích cỡ vấn đề đủ nhỏ ▪ Giải: kết hợp lời giải từ vấn đề nhỏ thành lời giải vấn đề ban đầu ▪ Thường dễ dàng cài đặt đệ quy ▪ Biến thể: giảm để trị (decrease and conquer) ▪ Giảm dần quy mô vấn đề xuống đủ nhỏ ▪ Dễ dàng cài đặt vịng lặp (thay đệ quy) ▪ Ví dụ: tìm kiếm nhị phân TRƯƠNG XUÂN NAM 16 Ưu điểm chia để trị ▪ Thích hợp với xử lý song song: ▪ Các vấn đề độc lập xử lý song song với thay ▪ Lợi tốc độ tận dụng hệ thống đa nhân, chí hệ thống phân tán ▪ Thích hợp với tư từ xuống: tiếp cận chia để trị phù hợp cách tự nhiên với lối suy nghĩ top-down ▪ Dễ dàng chuyển đổi từ thuật giải sang mã lập trình: đặc biệt thích hợp với cài đặt đệ quy ▪ Dễ dàng tăng tốc nhớ: vấn đề thường hay giống nhau, sử dụng nhớ để lưu lại kết tính tốn (đệ quy có nhớ) TRƯƠNG XN NAM 17 Nhược điểm chia để trị ▪ Đệ quy thường chậm (so với cài đặt vòng lặp) ▪ Khơng phải vấn đề chia để trị (và vấn đề thường vấn đề khó) ▪ Khơng chia nhỏ vấn đề ▪ Chia vấn đề độ phức tạp không giảm ▪ Đôi không ổn định: cài đặt đệ quy đơi khó ước lượng độ phức tạp tốn, đoạn mã khơng ổn định tốc độ, lúc nhanh lúc chậm thuộc vào liệu điều kiện khác ▪ Khó tìm sửa lỗi hơn: nhược điểm cố hữu mã đệ quy TRƯƠNG XUÂN NAM 18 Phần Bài tập TRƯƠNG XUÂN NAM 19 Bài tập Các chuỗi fibonacci định nghĩa đệ quy sau: g1 = A g2 = B gn = gn-2 + gn-1 (ghép chuỗi) Như chuỗi fibonacci sau: A B AB BAB ABBAB BABABBAB ABBABBABABBAB Tìm từ thứ M chuỗi thứ N TRƯƠNG XUÂN NAM 20 Bài tập 2.Cho dãy A = (a1, a2, an-1, an) Tìm diff(A) = chênh lệch lớn hai phần tử A Yêu cầu: thiết kế giải thuật chia để trị với độ phức tạp tính toán cỡ O(nlogn) 3.Cho dãy A = (a1, a2, an-1, an) Một phần tử gọi phần tử phổ biến xuất nửa giá trị A Biết dãy A có phần tử phổ biến Hãy tìm giá trị phần tử Yêu cầu: thiết kế giải thuật chia để trị Liệu có tồn giải thuật với độ phức tạp tính tốn cỡ O(n)? TRƯƠNG XN NAM 21 ... tưởng chia để trị Bài tốn tính giá trị đa thức Bài toán tháp Hà Nội Bài toán đếm số dãy có tổng cho trước Phân tích chia để trị Bài tập TRƯƠNG XUÂN NAM Phần Ý tưởng chia để trị TRƯƠNG XUÂN NAM. .. trị TRƯƠNG XUÂN NAM Ý tưởng chia để trị TRƯƠNG XUÂN NAM Ý tưởng chia để trị ▪ Bài học từ sống: chia nhỏ bó đũa để dễ bẻ ▪ Ý tưởng bản: chia nhỏ toán lớn thành toán để tìm lời giải dễ dàng ▪ Tính... S-an • Chính F(S-an, n-1) ▪ Suy ra: F(S, n) = F(S, n-1) + F(S-an, n-1) ▪ Lời giải chậm bùng nổ tổ hợp, cách khác phục? TRƯƠNG XUÂN NAM 14 Phần Phân tích chia để trị TRƯƠNG XN NAM 15 Tóm lược tiếp