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…
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: 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.OrderedDictvớ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
keytồn tại trong cache: đánh dấukeylà 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
keykhô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ấukeylà vừa được sử dụng. - Nếu
keychư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 4Output
Thành công / Đáp ứng đầy đủ ràng buộcGiải thích
Dữ liệu kiểm thử mẫu và kết quả thực thi theo yêu cầu.
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.
