Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. from collections import deque
  2.  
  3. class LFUCache(object):
  4.  
  5. def __init__(self, capacity):
  6. self.value = {}
  7. self.resque = {}
  8. self.capacity = capacity
  9. self.evictionQueue = deque()
  10.  
  11.  
  12. def get(self, key):
  13. ret = -1
  14. if key in self.value:
  15. ret = self.value[key]
  16. self.resque[key] = self.resque.get(key, 0)+1
  17.  
  18. return ret
  19.  
  20.  
  21. def set(self, key, value):
  22. if self.capacity == 0:
  23. return
  24. # Eviction is needed
  25. if key not in self.value and self.capacity == len(self.value):
  26. eviction = False
  27. while not eviction:
  28. key2evict = self.evictionQueue.popleft()
  29. if self.resque.get(key2evict, 0) > 0:
  30. self.resque[key2evict] -= 1
  31. self.evictionQueue.append(key2evict)
  32. else:
  33. eviction = True
  34. if key2evict in self.value:
  35. self.value.pop(key2evict)
  36. if key2evict in self.resque:
  37. self.resque.pop(key2evict)
  38.  
  39.  
  40. self.value[key] = value
  41. self.resque[key] = 0
  42. self.evictionQueue.append(key)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement