/
anz
/
AAB_algorithms
Обзор
Документация
Войти
/
anz
/
AAB_algorithms
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
LRU.py
104 строки
3 KB
anz
добавление примера работы LRU Cache
31 мар 2025, 16:49
31 мар 2025, 16:49
fe7dab0
Код
Авторство
О чём код?
class Node: def __init__(self, key, value): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity): self.capacity = capacity self.cache = {} self.head = Node(None, None) self.tail = Node(None, None) self.head.next = self.tail self.tail.prev = self.head def _remove(self, node): prev_node = node.prev next_node = node.next prev_node.next = next_node next_node.prev = prev_node node.prev = None node.next = None def _add_to_head(self, node): node.prev = self.head node.next = self.head.next self.head.next.prev = node self.head.next = node def _move_to_head(self, node): self._remove(node) self._add_to_head(node) def get(self, key): if key not in self.cache: return None node = self.cache[key] self._move_to_head(node) return node.value def set(self, key, value): if key in self.cache: node = self.cache[key] node.value = value self._move_to_head(node) return if len(self.cache) >= self.capacity: lru_node = self.tail.prev self._remove(lru_node) del self.cache[lru_node.key] new_node = Node(key, value) self.cache[key] = new_node self._add_to_head(new_node) def delete(self, key): if key in self.cache: node = self.cache[key] self._remove(node) del self.cache[key] def out(self): current = self.head.next while current != self.tail: print(f"[{current.key}:{current.value}]", end=" ") current = current.next print() # ПРИМЕР РАБОТЫ cache = LRUCache(3) print("Добавляем элементы A, B, C:") cache.set("A", 1) cache.set("B", 2) cache.set("C", 3) cache.out() print("Получаем элемент A, и он перемещается в начало:") cache.get("A") cache.out() print("Добавляем новый элемент D, он вытесняет B:") cache.set("D", 4) cache.out() print("Обновляем существующий элемент C:") cache.set("C", 300) cache.out() print("Удаляем элемент D:") cache.delete("D") cache.out() print("Пытаемся получить несуществующий элемент S:") print("Значение S:", cache.get("X")) print("Добавляем элементы U и J:") cache.set("U", 5) cache.set("J", 6) cache.out()