3/3/2019 BẠN THƯỜNG LÀM GÌ KHI NHẬN MỘT BÀI TẬP LẬP TRÌNH ? CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Data Structures & Algorithms Các chiến lược thiết kế giải thuật Nội dung Vét cạn Vét cạn – Complete Search/Brute-force Search Chia để trị – Divide and Conquer Tham lam – Greedy Qui hoạch động – Dynamic Programming Mỗi chiến lược có tính chất riêng thích hợp cho số dạng tốn 3/3/2019 Vét cạn Vét cạn theo nghĩa thông thường xét hết đối tượng hay trường hợp • Bài tốn: Có tập C ứng viên hàm f để đánh giá/cho điểm ứng viên Hãy tìm ứng viên đánh giá/có điểm cao • Phương pháp giải: Duyệt tất ứng viên, tính điểm cho ứng viên, sau lấy ứng viên có điểm cao Ví dụ: Tìm vị trí số x dãy a gồm N số thực • Input: dãy (a, N) – dãy gồm N số thực, số x – số cần tìm • Output: số ngun – vị trí x a (-1 a khơng có x) Giải thuật vét cạn Vét cạn – dạng thức chung Tìm lời giải cho tốn P C first(P) While (c ) If correct(P, c) Return c; c next(P, c); End While Return NULL; //khơng có lời giải • Ý tưởng: Thử tìm x vị trí a, tìm thấy ngừng báo vị trí Nếu thử hết vị trí mà khơng thấy x báo -1 • Giải thuật: For pos = N-1 If (a[pos] = x) Return pos EndFor Return -1 Vét cạn Chia để trị Chia toán thành tốn kích thước nhỏ • Ưu điểm: ln đảm bảo tìm nghiệm (nếu có) xác giải độc lập Sau kết hợp nghiệm tốn kích thước nhỏ thành nghiệm tốn gốc • Nhược điểm: thời gian thực thi lớn 11 12 3/3/2019 Chia để trị 14 Ví dụ 1: Cho dãy a gầm N phần tử xếp theo chiều tăng dần Tìm vị trí phần tử x dãy a • Chia tốn thành tốn nhỏ • Giải tốn (thường dùng đệ • Input: dãy (a, N) – dãy gồm N số thực, số x – số cần tìm • Output: số ngun – vị trí x a (-1 a khơng có x) quy) • Tổng hợp kết từ tốn thành lời giải 13 • Ý tưởng: Thử tìm x vị trí (mid) (a, left, right), x=a[mid] ngừng báo vị trí; x < a[mid] tìm x đoạn bên trái mid; ngược lại tìm x đoạn bên phải mid Tìm thấy vị trí X=2 M L R 10 Giải thuật: left = 0; right = N-1 While (left = 1; //N /= } return ans; 10 } Tham lam Thực bước Tại bước, chọn phương án xem tốt lúc 22 Ví dụ: Tìm tập có tích lớn dãy a có N phần tử • Input: N – số nguyên không âm, a – dãy gồm N số thực, • Output: số thực – tích lớn Cách tiếp cận: • “ngây thơ – nạve”: phát sinh tất 2N tập con, từ tập có tích lớn – vét cạn • Tham lam Ý tưởng: Nếu dãy khơng có số có số số âm chẵn: kết tích tồn số dãy Nếu dãy có