From 67d54218e59e4f03ffc7520c87fc0297e94409ac Mon Sep 17 00:00:00 2001 From: Keshav Krishna <57027202+keshavkrishna@users.noreply.github.com> Date: Sat, 7 Jun 2025 19:58:07 +0530 Subject: [PATCH] Update eviction_policies.py --- eviction_policies.py | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/eviction_policies.py b/eviction_policies.py index d7dbf45..db89bc5 100644 --- a/eviction_policies.py +++ b/eviction_policies.py @@ -1,6 +1,7 @@ from abc import ABC, abstractmethod from typing import Generic, TypeVar from collections import OrderedDict +import random K = TypeVar('K') @@ -55,4 +56,37 @@ def remove(self, key: K) -> None: self.stack.remove(key) def evict(self) -> K: - return self.stack.pop() \ No newline at end of file + return self.stack.pop() + +class RandomEvictionPolicy(EvictionPolicy[K]): + def __init__(self): + self.items = set() + + def add(self, key: K) -> None: + self.items.add(key) + + def remove(self, key: K) -> None: + self.items.discard(key) + + def evict(self) -> K: + if not self.items: + raise IndexError("Eviction called on empty policy.") + key = random.choice(list(self.items)) + self.items.remove(key) + return key + +class MRUEvictionPolicy(EvictionPolicy[K]): + def __init__(self): + self.order = OrderedDict() + + def add(self, key: K) -> None: + if key in self.order: + del self.order[key] + self.order[key] = None + + def remove(self, key: K) -> None: + self.order.pop(key, None) + + def evict(self) -> K: + return self.order.popitem(last=True)[0] +