python-026Đọc toàn bộ đề miễn phí

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…

PythonTrung bình25 phút

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ủ đề

iterator protocoldunder methodslazy evaluationoop

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 ≤ 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).
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.