Нашли ошибку?

Кэш превью с вытеснением

СложнаяРеализацияГлава 5

#хеш-таблицы#кэширование#связанные спискиid: ga-preview-cache

Галерея хранит в памяти не больше capacity превью фотографий. Когда место заканчивается, выбрасывается превью, к которому дольше всех не обращались (LRU — least recently used). Реализуйте класс PreviewCache: get(photo_id) возвращает превью или None, put(photo_id, preview) добавляет или обновляет превью. Оба метода считаются «обращением».

Пример

cache = PreviewCache(2)
cache.put("a", "превью A")
cache.put("b", "превью B")
cache.get("a")               # "превью A" — теперь «a» использовалась недавно
cache.put("c", "превью C")   # места нет: вытесняется «b»
cache.get("b")               # None

Ограничения

Решение

class PreviewCache:
    """Кэш на capacity элементов с вытеснением давно не использованных (LRU)."""

    def __init__(self, capacity: int) -> None:
        # ваш код
        raise NotImplementedError

    def get(self, photo_id: str) -> str | None:
        # ваш код
        raise NotImplementedError

    def put(self, photo_id: str, preview: str) -> None:
        # ваш код
        raise NotImplementedError

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 preview_cache.py — тесты те же, результат покажет ✓ / ✗ и итог.