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 đượ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 <= 0hoặcstep <= 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
tuplegồm đúngwindow_sizephần tử. - Khi không còn đủ
window_sizephầ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
stepphầ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 ≤ window_size ≤ 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.
