data【】LRU算法
时间: 2024-10-23 16:11:19 浏览: 10
LRU(Least Recently Used)算法是一种常用的缓存淘汰算法,用于决定当缓存空间不足时应该淘汰哪个缓存项。其基本思想是,将最近使用过的数据放在缓存的末尾,当缓存空间不足时,优先淘汰最久未使用的数据。
在编程语言中,如Python的collections.deque库或者Java的LinkedHashMap等数据结构中,都有实现LRU算法。这些数据结构能够以O(1)的时间复杂度实现LRU算法。
下面是一个简单的Python版本的LRU缓存实现:
```python
class LRUCache:
def __init__(self, capacity: int):
self.cache = collections.OrderedDict()
self.capacity = capacity
def get(self, key: int) -> int:
if key not in self.cache:
return -1
else:
self.cache.move_to_end(key) # 将该键值对移到字典的末尾,表示最近使用过
return self.cache[key]
def put(self, key: int, value: int) -> None:
if key in self.cache:
self.cache.move_to_end(key) # 如果键存在,则移到末尾表示最近使用过
self.cache[key] = value
if len(self.cache) > self.capacity:
self.cache.popitem(last=False) # 如果超过容量,则淘汰最久未使用的键值对
```
这个LRUCache类有一个容量参数,它表示缓存的最大容量。get和put方法分别用于获取和添加元素。如果元素存在于缓存中,get方法会将其移到字典的末尾,以表示最近使用过。如果元素存在于缓存中并且要添加新元素使得缓存容量超过最大容量,那么这个旧的元素就会被淘汰。注意,在Python中,字典的popitem方法会返回被移除的键值对,而在这里我们只关心键,所以用了popitem(last=False)来直接移除并返回字典的最后一个元素(也就是最久未使用的元素)。
阅读全文