操作系统2存储管理之LRU页面置换算法(LeetCode146)我只是一个码农

题目:运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。

它应该支持以下操作:获取数据get和写入数据put。

获取数据get(key)-如果密钥(key)存在于缓存中,则获取密钥的值(总是正数),否则返回-1。

写入数据put(key,value)-如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。

当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。

示例:LRUCachecache=newLRUCache(2/*缓存容量*/);cache.put(1,1);cache.put(2,2);cache.get(1);//返回1cache.put(3,3);//该操作会使得密钥2作废cache.get(2);//返回-1(未找到)cache.put(4,4);//该操作会使得密钥1作废cache.get(1);//返回-1(未找到)cache.get(3);//返回3cache.get(4);//返回4

代码:

原理:

如图:图中的页面为三页,依次向存储中加入432143543215这些数字。

而存储空间只能存储三个页面,所以会按照上述规则不断淘汰已经存储在页面中的数字。

解题思路(logN的思路):

知道了LRU的置换规则后,由于此题需要存储的是key和value,所以

其次,选择一种合适的数据结构来解决存储优先级问题,此处我们采用内部是小顶堆的PriorityQueue优先级队列用来实现times最小的元素在队头

但是我们会在让新元素入队之前可能会删除队列中指定元素,当然可以去遍历队列,但是这样太慢了

我们可以再用一种HashMap的数据集合用来存储节点,以便快速通过node的key来得到整个node。

THE END
1.深度学习实现回归预测mob64ca1415f0ab的技术博客4.鸟群算法改进DELM 5.实验结果 6.参考文献 7.Matlab代码 1.ELM原理 ELM基础原理请参考:。 自动编码器 AE(Auto Encoder)经过训练可以将输入复制到输出。因为不需要标记数据,训练自动编码器是不受监督的。因此,将AE的思想应用到ELM中,使ELM的输入数据同样被用于输出,即输出Y=X。作为自编码器的极限学习机ELM-https://blog.51cto.com/u_16213707/12868183
2.C++实现LRU缓存算法算法软件开发其实,上面的代码,有一些毛病的。改天我会继续改进。 例如: 1:冗余操作。cached_entries完全可以用一个counter代替。 2:过度抽象。 3:Get、Put的interface不合理。如果真的去实现一个磁盘block的LRU cache,就会发现之前的接口需要重写了。 不过对于大家理解LRU算法。应该有一定的帮助的。https://www.open-open.com/lib/view/open1395712450650.html
3.数据结构与算法之LRU:实现LRU缓存算法功能(Ts,Py,Go版双向链表的操作非常繁琐,代码很容易写错, 不易调试 链表node 要存储 node.key, 否则需要遍历 data 删除 Python3 版算法实现 1 )方案1 classLRUCache:def__init__(self,length):iflength<1:raiseValueError('Invalid length')self.length=length self.data={}self.order=[]defset(self,key,value):ifkeyinselhttps://download.csdn.net/blog/column/6186626/134097112
4.Redis缓存满了怎么办?LFU 与偶尔访问一次相比,数据不会被淘汰的问题得到了解决。 LRU 算法也更合理。 在Redis 记录在每个对象的头中 LFU 源代码如下: typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or * LFU data (least significanthttps://www.tulingxueyuan.cn/tlzx/jsp/4663.html
5.LRULFUTinyLFU缓存算法实例详解GolangLFU算法 我们已经成功的写出了LRU算法(伪代码),接下来尝试自己写一下LFU算法。首先我们知道LFU算法比LRU多了什么,LFU需要记录每条数据的访问次数信息,并且按照访问次数从高到低排序,访问次数用什么来记录呢? 只需要在链表节点中增加一个访问频率Frequency,就可以了,这个Frequency可以使用int来存储。同时排序的规则稍加变https://m.jb51.net/article/262101.htm
6.Algorithm进阶计划LRU与LFU算法1.2 LRU 算法代码实现 首先构建双链表如下: /** * 双链表的节点类 */publicclassNode{publicintkey,val;publicNodenext,prev;publicNode(intk,intv){this.key=k;this.val=v;}}/** * 双链表 */publicclassDoubleList{// 头尾虚节点privateNodehead,tail;// 链表元素数privateintsize;publicDoubleList(){https://www.jianshu.com/p/95429381636f
7.面试不再怕,20行Python代码帮你搞懂LRU算法面试不再怕,20行Python代码帮你搞懂LRU算法 LRU算法在后端工程师面试中,是一个比较常出现的题目,这篇文章带大家一起,理解LRU算法,并最终用Python轻松实现一个基于LRU算法的缓存。 缓存是什么 先看一张图,当我们访问网页,浏览器会给服务器发请求,服务器会经过一系列的运算,把页面返回给浏览器。https://cloud.tencent.com/developer/article/1355345