Cài đặt Iterator Cửa sổ trượt với Giao thức Iterator Chuẩn
Trong các hệ thống xử lý chuỗi thời gian (Time-series) và trích xuất đặc trưng N-gram cho mô hình AI, ta liên tục cần trích xuất các cửa sổ trượt (sliding window) kích thước W với
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: classes oop, dunder iter, dunder next, stop iteration.
Nội dung đề bài
Mục tiêu kiến thức
- Triển khai đầy đủ Giao thức Iterator chuẩn của Python gồm hai phương thức dunder: iter và next.
- Xử lý tín hiệu dừng lặp bằng ngoại lệ chuẩn StopIteration.
- Thiết kế thuật toán cửa sổ trượt bộ nhớ thấp trên mọi kiểu dữ liệu có thể lặp (Iterable).
Mô tả bài toán
Trong các hệ thống xử lý chuỗi thời gian (Time-series) và trích xuất đặc trưng N-gram cho mô hình AI, ta liên tục cần trích xuất các cửa sổ trượt (sliding window) kích thước W với bước nhảy S.
Hãy cài đặt lớp SlidingWindowIterator:
- Hàm khởi tạo: init(self, iterable: Iterable[Any], window_size: int, step: int = 1)
- Kiểm tra tính hợp lệ: Nếu window_size <= 0 hoặc step <= 0, ném ngoại lệ ValueError("window_size va step phai lon hon 0").
- Khởi tạo con trỏ iterator từ iterable.
- Phương thức iter(self) -> 'SlidingWindowIterator':
- Trả về chính đối tượng hiện tại (self).
- Phương thức next(self) -> tuple:
- Trả về cửa sổ tiếp theo dưới dạng một tuple gồm đúng window_size phần tử.
- Khi không còn đủ window_size phần tử để tạo thành một cửa sổ trọn vẹn, phương thức phải ném ngoại lệ StopIteration.
- Sau mỗi lần yield một cửa sổ, cửa sổ tiếp theo sẽ dịch chuyển sang phải đúng step phần tử.
Input
- iterable: Bất kỳ iterable nào (danh sách, chuỗi, generator...).
- window_size: Độ dài mỗi cửa sổ (số nguyên dương).
- step: Bước nhảy giữa các cửa sổ (số nguyên dương, mặc định 1).
Output
Từng cửa sổ trượt dưới dạng tuple.
Ràng buộc
- 1 ≤ windowsize ≤ 105.
- 1 ≤ step ≤ 105.
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
Ví dụ 1
Input
data = [1, 2, 3, 4, 5], window_size = 3, step = 1
Output
[(1, 2, 3), (2, 3, 4), (3, 4, 5)]Ví dụ 2
Input
data = [1, 2, 3, 4, 5, 6], window_size = 3, step = 2
Output
[(1, 2, 3), (3, 4, 5)]
(Cửa sổ tiếp theo bắt đầu từ phần tử thứ 5 là (5, 6) chỉ có 2 phần tử, không đủ kích thước 3 nên dừng).
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
