Tài liệu bài tập chuyên đề Duyệt toàn bộ ôn thi học sinh giỏi, sử dụng ngôn ngữ lập trình c++ hoặc pascal: xử lý mảng, duyệt toàn bộ. Duyệt hay còn gọi là vét cạn được chia thành hai nội dung chính: Duyệt bằng các vòng lặp với các bài toán có kích thước tương đối lớn và dùng đệ qui duyệt các bài toán tổ hợp có kích thước nhỏ. Trong chuyên đề này chỉ giới thiệu về nội dung thứ nhất DUYỆT – VÉT CẠN BẰNG CÁCH SỬ DỤNG CÁC VÒNG LẶP
CHUYÊN ĐỀ DUYỆT A MỞ ĐẦU Chúng ta biết đặc điểm ưu việt máy tính điện tử khả tính tốn nhanh xác Vì lý nên duyệt (vét cạn) thuật toán thường nhắc đến nhiều Tin học Trong ba chiến lược thiết kế thuật tốn (duyệt – vét cạn, đệ qui- quy hoạch động tham lam) “duyệt – vét cạn” giải lượng lớn tập Duyệt hay gọi vét cạn chia thành hai nội dung chính: Duyệt vịng lặp với tốn có kích thước tương đối lớn dùng đệ qui duyệt tốn tổ hợp có kích thước nhỏ Trong chuyên đề giới thiệu nội dung thứ DUYỆT – VÉT CẠN BẰNG CÁCH SỬ DỤNG CÁC VÒNG LẶP B NỘI DUNG I LÝ THUYẾT VỀ PHƯƠNG PHÁP DUYỆT Các bước giải tốn duyệt Bước 1: Mơ tả đối tượng cần duyệt tham số (biến); Xác định phạm vi duyệt (Viết câu lệnh lặp để duyệt) Bước 2: Viết phần kiểm tra với đối tượng duyệt nêu Bước 3: Viết phần update kết quả; xác định việc khởi tạo giá trị đầu cho kết Bước 4: Tối ưu thuật toán tốt + Tối ưu phần kiểm tra + Tối ưu phần duyệt Kiến thức bổ trợ giúp tối ưu thuật toán duyệt a) Quy hoạch động đơn giản: Thường dùng để tính toán trước giúp cho tối ưu phần kiểm tra Một số thao tác tính tốn trước quy hoạch động: + Cộng dồn: Để tính tổng, đếm từ a i đến aj (QHĐ O(n); truy vấn O(1)); + Tìm phần tử có giá trị min, max từ a đến từ an đề (chuẩn bị QHĐ O(n); truy vấn O(1)) Lmin[1]:=a[1]; for (int i=2; i phải dùng Lazy c) Dùng hàng đợi, stack, hàng đợi ưu tiên: + Hàng đợi: Để tìm max, đoạn có độ dài cố định (dạng trượt chạy mảng + Stack: Để tìm phần tử liền trước i liền sau i có giá trị nhỏ (lớn ai) d) Một số kiến thức khác - Đếm phân phối; - Kỹ thuật Neo; - Tìm kiếm nhị phân II BÀI TẬP ÁP DỤNG 2.1 Các toán duyệt với tham số: Bài 1: DUYỆT MẢNG (duyetmang.cpp) Cho dãy số nguyên dương a1, a2, ,an Hãy lập trình tính tổng phần tử chẵn dãy a Input: Dữ liệu nhập vào từ bàn phím gồm: - Dòng 1: Một số nguyên dương n (n ≤106) - Dòng số nguyên dương a1, a2, , an (ai ≤ 109) Output: Đưa hình số nguyên tổng phần tử chẵn tìm Ví dụ: Input 13 Output Bước 1: Mô tả đối tượng duyệt, phạm vi duyệt, + Đối tượng duyệt: phần tử mảng + Mô tả: Gọi i số phần tử cần duyệt + Phạm vi: i nhận giá trị từ đến n + Câu lệnh lặp để duyệt: for (int i=1; i