lru算法c语言实现,
本文主要详细介绍用Python实现的LRU缓存替换算法。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
在第一部分中,已经实现了DoubleLinkedList类。在本节中,我们实现了基于双向链表的LRU(最近最少使用)缓存替换算法。redis的淘汰机制包括LRU算法,用于淘汰最近最少使用的数据。如何使用可以在Redis的配置文件中设置。
一、LRU算法的实现
逻辑很简单。有两个操作,get和put。在get中,如果元素存在,节点将从当前位置移动到链表的头部,表示最近访问过的节点。Put也移动到链表的头部,而不管该节点之前是否存在。搜索的O(1)复杂度通过相同的映射实现。
LRUCache类(对象):
def __init__(self,capacity=0xffffffff):
LRU缓存替换算法最近使用得最少。
:参数容量:
自我能力=能力
self.size=0
self.map={}
self.list=DoubleLinkedList(容量)
def get(self,key):
获取元素
Get元素不存在。不返回。
获取元素已经存在。从当前位置删除节点,并将其添加到链表的头部。
:参数键:
:返回:
#元素不存在
如果密钥不在self.map:中
不返回
node=self.map.get(key)
self.list.remove(节点)
self.list.append_front(node)
返回节点值
定义put(self,key,value):
添加元素
添加的元素已经具有更新的元素值,并且已经到达链表的头部。
添加的元素不存在。
链表容量达到上限,删除尾部元素。
链表的容量没有达到上限,添加到链表的头。
:参数键:
:参数值:
:返回:
如果键入self.map:
node=self.map.get(key)
节点值=值
self.list.remove(节点)
self.list.append_front(node)
else:
if self.size=self.capacity:
old_node=self.list.remove()
del self.map[old_node.key]
self.size -=1
node=Node(键,值)
self.map[key]=节点
self.list.append_front(node)
self.size=1
返回节点
自定义打印(自助):
打印当前链表。
:返回:
self.list.print()
二、测试逻辑
if __name__==__main__:
lru_cache=LRUCache(3)
lru_cache.put(1,1)
lru_cache.print()
lru_cache.put(2,2)
lru_cache.print()
print(lru_cache.get(1))
lru_cache.print()
lru_cache.put(3,3)
lru_cache.print()
lru_cache.put(1,100)
lru_cache.print()
lru_cache.put(4,4)
lru_cache.print()
print(lru_cache.get(1))
lru_cache.print()
测试结果:
这就是本文的全部内容。希望对大家的学习有所帮助,也希望大家能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。