python实现LRU算法
LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
python中有一个标准库的类的OrderedDict,该类有以下两个方法用来实现LRU算法就十分简单:
- popitem(last=True):有序字典的 popitem() 方法移除并返回一个 (key, value) 键值对。 如果 last 值为真,则按 LIFO 后进先出的顺序返回键值对,否则就按 FIFO 先进先出的顺序返回键值对。
- move_to_end(key, last=True):将现有 key 移动到有序字典的任一端。 如果 last 为真值(默认)则将元素移至末尾;如果 last 为假值则将元素移至开头。如果 key 不存在则会触发 KeyError
代码实现:
from collections import OrderedDict, defaultdictclass LRU:def __init__(self, capacity=128):self.capacity = capacity # 缓存容量self.cache = OrderedDict() # 有序字典缓存def put(self, key, value):"""数据录入缓存"""if key in self.cache:# 若数据已存在,表示命中一次,需要把数据移到缓存队列末端self.cache.move_to_end(key)returnif len(self.cache) >= self.capacity:# 若缓存已满,则需要淘汰最早没有使用的数据self.cache.popitem(last=False)# 录入缓存self.cache[key]=valuedef travel(self):"""遍历key"""for key in self.cache.keys():print(key)if __name__ == '__main__':l = LRU(3) # 实例化缓存容量为3l.put('a','aa') # 此时缓存未满,则录入数据al.put('b','bb') # 此时缓存未满,则录入数据bl.put('c','cc') # 此时缓存未满,则录入数据cl.put('a','aa') # 此时缓存已满,但是a已存在缓存中,则命中一次# l.travel() # 输出 b c al.put('d','dd') # 此时缓存已满,淘汰掉最久不用的bl.travel() # 输出 c a d
python实现LRU算法相关推荐
- python模拟页面调度LRU算法
所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面. 问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输 ...
- Python列表模拟页面调度LRU算法(京东2016笔试题)
问题描述:一进程刚获得3个主存块的使用权,若该进程访问页面的次序是1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.当采用LRU算法时,发生的缺页次数是多少? 解析:所谓LRU算法 ...
- 【腾讯三面】你能现场写一下LRU算法吗?
" 金三银四,又到了换工作的黄金期.各位小伙伴们都准备好了吗? " 这句话大家是不是最近已经要看吐了呢? 每当这个时候,就证明招聘旺季又来啦~ 春招.校招.社招-- 那你真的准备好 ...
- Redis的LRU算法
2019独角兽企业重金招聘Python工程师标准>>> 整理自官方文档:将redis当做使用LRU算法的缓存来使用 当Redis被当做缓存来使用,当你新增数据时,让它自动地回收旧数据 ...
- LRU算法模拟器(基于Java和VUE前端实现)
目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 ...
- 【学习笔记】【计算机组成原理】定点数与浮点数的运算;LRU算法实现;cache命中;流水线冲突、冲刷;
目录 前言 一.计算机组成原理-背景 1.计算机的发展简史 2.计算机的分类 3.计算机的体系结构 4.计算机的层次与编程语言 5.计算机的计算单位 6.计算机的字符与编码集 二.计算机组成原理-组成 ...
- linux页面算法源码,LRU算法原理解析
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...
- LRU算法 -- 链表 完整实现
LRU算法(Least Recently Used) 算是我们经常遇到的一种淘汰算法,其中内存管理模块进行内存页回收时有用到,针对不经常使用的内存页,LRU淘汰策略能够将该内存页回收给操作系统. 属于 ...
- python数据结构与算法总结
python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构在python中的应用> ...
最新文章
- 【pytorch】pytorch-backward()的理解
- HTTP简介、请求方法与响应状态码
- mysql 区分大小写(大小写敏感)配置
- 传输滤波器的选型及使用说明
- 程序员跳槽的10个建议
- 深度学习神经网络:改善与优化的方法
- 【OJ】华东师范大学Python程序设计OJ题解
- 透传模式(透明传输SeriaNet)详解
- 信源压缩编码 编程c语言,霍夫曼信源编码实验报告.docx
- centos nginx php5.3,centos6.2+nginx-1.2.3+php-5.3.17装配脚本
- 凸优化第二章凸集 2.3 保凸运算
- 如何搭建自己的wiki
- 易天光模块交期漫画故事
- supervisord使用
- SylixOS 共用中断号机制
- 从满腹经纶到入行小白:理论学习与实际应用的差距
- android mock测试资源,Android测试基础整理篇
- mysql误删库恢复操作
- 【我的新学期】学习季
- 一文8个步骤从0到1实现Python+Selenium自动化测试项目实战【建议收藏】
热门文章
- 用户需求计算机配置单,根据客户要求写的电脑配置单,5500元嫌贵:您还是再看看吧!...
- 真牛皮!unity和java就业前景
- 解读手机拍照的各个参数(文档模式)
- Conmi的正确答案——jQuery的ajaxSubmit的正确用法
- html能连接手机与电视吗,手机如何投屏到液晶电视上?用这4种方法轻松连接,相互告知吧!...
- tp小程序微信支付部分代码
- Angular2使用ng2-file-upload上传文件
- 读-李林峰-分布式服务框架和原理14-17
- mysql 从第几个字符串开始截取_MySQL截取字符串函数方法
- me shy是什么歌 抖音make_原来这才是抖音上最火爆的5首原版英文歌!