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

Xây dựng Lớp LRU Cache Hiệu năng cao với OrderedDict

Trong hệ thống AI Empire Academy, ta cần lưu trữ các câu trả lời gần nhất của trợ giảng AI để phản hồi tức thì cho học viên mà không cần gọi lại API tốn kém. Khi bộ nhớ đệm đầy, ph…

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

ordered dictcachingdata structurestime complexity

Kiến thức tiên quyết: collections module, hash map, eviction policy.

Nội dung đề bài

Mục tiêu kiến thức

  • Hiểu nguyên lý hoạt động của chiến lược loại bỏ phần tử cũ nhất (Least Recently Used - LRU).
  • Khai thác sức mạnh của collections.OrderedDict với các phương thức O(1): move_to_end() và popitem(last=False).
  • Thiết kế lớp quản lý bộ nhớ đệm đáp ứng thời gian thực cho hệ thống Backend và LLM Prompt Cache.

Mô tả bài toán

Trong hệ thống AI Empire Academy, ta cần lưu trữ các câu trả lời gần nhất của trợ giảng AI để phản hồi tức thì cho học viên mà không cần gọi lại API tốn kém. Khi bộ nhớ đệm đầy, phần tử ít được sử dụng nhất (truy cập hoặc cập nhật xa nhất trong quá khứ) sẽ bị loại bỏ trước.

Hãy cài đặt lớp LRUCache:

  • Khởi tạo: __init__(self, capacity: int)
  • capacity: Sức chứa tối đa của cache (số lượng key-value).
  • Nếu capacity <= 0, ném ngoại lệ ValueError("capacity phai lon hon 0").
  • Phương thức get(self, key: Any) -> Any:
  • Nếu key tồn tại trong cache: đánh dấu key là vừa được sử dụng (chuyển lên vị trí mới nhất) và trả về giá trị tương ứng.
  • Nếu key không tồn tại: trả về -1.
  • Phương thức put(self, key: Any, value: Any) -> None:
  • Nếu key đã tồn tại: cập nhật giá trị mới và đánh dấu key là vừa được sử dụng.
  • Nếu key chưa tồn tại:
  • Nếu cache đã đạt tới capacity, loại bỏ phần tử ít được sử dụng nhất (LRU key).
  • Thêm cặp (key, value) mới vào cache và đánh dấu là mới nhất.
  • Phương thức size(self) -> int:
  • Trả về số lượng phần tử hiện đang lưu trữ trong cache.
  • Phương thức clear(self) -> None:
  • Xóa toàn bộ phần tử trong cache.

Mọi thao tác get và put đều phải đạt độ phức tạp thời gian trung bình O(1).

Input

  • Các tham số truyền vào hàm/lớp LRUCache hoặc dữ liệu đầu vào theo định dạng mô tả.

Output

  • Kết quả trả về của hàm/lớp LRUCache hoặc dữ liệu in ra màn hình theo đúng đặc tả.

Ràng buộc

  • 1 ≤ capacity ≤ 105.
  • Số lượng thao tác: tối đa 2 × 105.
  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.

Ví dụ 1

Input

cache = LRUCache(2)
cache.put(1, 1)
cache.put(2, 2)
cache.get(1)       # Tra ve 1 (key 1 thanh moi nhat, key 2 thanh cu nhat)
cache.put(3, 3)    # Dung luong day, loai bo key 2
cache.get(2)       # Tra ve -1 (khong tim thay)
cache.put(4, 4)    # Dung luong day, key 1 la cu nhat nen bi loai bo
cache.get(1)       # Tra ve -1
cache.get(3)       # Tra ve 3
cache.get(4)       # Tra ve 4

Output

Thành công / Đáp ứng đầy đủ ràng buộc

Giải thích

Dữ liệu kiểm thử mẫu và kết quả thực thi theo yêu cầu.

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.