位置: 编程技术 - 正文

LRUCache的实现原理及利用python实现的方法(lrucache算法)

编辑:rootadmin

推荐整理分享LRUCache的实现原理及利用python实现的方法(lrucache算法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:实现lru算法所需的硬件支持是什么?,lrucache算法,实现lru算法常用方法有几种,lru实现原理,lru实现原理,lrucache算法,实现lru算法常用方法有几种,lrucache原理,内容如对您有帮助,希望把文章链接给更多的朋友!

简介

LRU(Least Recently Used)最近最少使用,最近有时间和空间最近的歧义,所以我更喜欢叫它近期最少使用算法。它的核心思想是,如果一个数据被访问过,我们有理由相信它在将来被访问的概率就越高。于是当LRU缓存达到设定的最大值时将缓存中近期最少使用的对象移除。LRUCache内部使用LinkedHashMap来存储key-value键值对,并将LinkedHashMap设置为访问顺序来体现LRU算法。

无论是对某个key的get,还是set都算做是对该key的一次使用。当set一个不存在的key,并且LRU Cache中key的数量超过cache size的时候,需要将使用时间距离现在最长的那个key从LRU Cache中清除。

LRU Cache实现

在Java中,LRUCache是通过LinkedHashMap实现的。鄙人照猫画虎,实现一个Python版的LRU Cache(可能和其他大神的实现有所区别)。

首先,需要说明的是:

LRU Cache对象内部会维护一个 双端循环链表 的 头节点

LRU Cache对象内部会维护一个dict

LRUCache的实现原理及利用python实现的方法(lrucache算法)

内部dict的value都是Entry对象,每个Entry对象包含:

key的hash_code(hash_code = hash(key),在本实现中,hash_code相同的不同key,会被当作一个key来处理。因此,对于自定义类,应该实现魔术方法:__hash__) v - (key, value)对中的value prev - 前一个对象 next - 后一个对象

具体实现是:

当从LRU Cache中get一个key的时候:

计算该key的hash_code 从内部dict中获取到entry 将该entry移动到 双端循环链表 的 第一个位置 返回entry.value

当向LRU Cache中set一个(key, value)对的时候:

计算该key的hash_code,

从LRU Cache的内部dict中,取出该hash_code对应的old_entry(可能不存在),然后根据(key, value)对生成一个new_entry,之后执行:

dict[hash_code] = new_entry 将new_entry提到 双端循环链表 的第一个位置 如果old_entry存在,则从链表中删除old_entry 如果是新增了一个(key, value)对,并且cache中key的数量超过了cache size,那么将双端链表的最后一个元素删除(该元素就是那个最近最少被使用的元素),并且从内部dict中删除该元素

HashMap的实现原理

(面试过程中也经常会被问到):数组和链表组合成的链表散列结构,通过hash算法,尽量将数组中的数据分布均匀,如果hashcode相同再比较equals方法,如果equals方法返回false,那么就将数据以链表的形式存储在数组的对应位置,并将之前在该位置的数据往链表的后面移动,并记录一个next属性,来指示后移的那个数据。

注意:数组中保存的是entry(其中保存的是键值)

Python实现

总结

标签: lrucache算法

本文链接地址:https://www.jiuchutong.com/biancheng/372311.html 转载请保留说明!

上一篇:Python利用itchat对微信中好友数据实现简单分析的方法(利用python进行)

下一篇:django模型层(model)进行建表、查询与删除的基础教程(django模块详解)

  • 金税四期税务机关一局式
  • 印花税的征税对象是条例列举的凭证未列举的不征税
  • 土地增值税税率2023
  • 工商年报主营业务怎么填
  • 电子税务局增值税发票系统
  • 劳务派遣的开票规范
  • 软件开发里面的人天
  • 退回的税款如何做账
  • 出口报关单上的运费和保费和实际不一致
  • 行政单位应缴预算款的管理原则
  • 案件补贴
  • 企业要怎样才能发挥其在实现生态产品价值过程中的作用
  • 以存货抵偿债务结转的相关存货跌价准备
  • 化工类资质建筑企业有哪些
  • 一般纳税人的账户是基本账户吗
  • 公司房产出租租金如何开票?
  • 电子发票能不能作废重开
  • 税控盘开票流程图解2022
  • 中药饮片的税率现在是多少
  • 本单位员工投稿怎么写
  • 收到快递关税做什么科目
  • 利润是如何转化成平均利润的
  • 民办非企业年底额度不能低于多少
  • 合同条款签订
  • win10打开txt
  • 实例讲解yii2.0在php命令行中运行的步骤
  • 政策性退税流程
  • 暂估入库怎么暂估
  • SIMETER.EXE - SIMETER是什么进程 有什么用
  • PHP:mb_list_encodings()的用法_mbstring函数
  • 文竹浇白糖水的正确方法
  • php语言标记风格有四种,分别是
  • 长期股权投资期末按什么计量
  • php机试题
  • php获取网页所有页数
  • 员工多交的个人社保
  • 关于预付账款的特点
  • 公司基本户被冻结,其它账户也会被冻吗?
  • 航天金税税控盘运行环境
  • 税收优惠与政府补助对于企业研发来说哪个优惠力度大
  • 研发企业所得税税率
  • python中列表的作用
  • 地价计入房产原值文件解读
  • 计提坏帐包含其他收入吗
  • 疫情期间制造费用账务处理
  • 残疾人保障金是什么费用
  • 费用没有发票先开什么
  • 营业成本指的什么
  • 残保金季报还是月报
  • 有限合伙企业的税收筹划
  • 收到投资款如何声明
  • 蓝字发票作废流程视频
  • 货物丢失怎么做分录
  • 资产负债表中的存货怎么算
  • 个税公司少申报一个月会对个人有什么影响
  • 外汇汇率调整分为哪几种
  • 应交税费进项税额转出
  • 培训费开增值税专用发票可以抵扣吗
  • 特许权使用费代扣代缴企业所得税
  • 固定资产为什么提折旧,有何实际意义
  • 数据库账号密码怎么修改
  • windows mobile应用下载
  • ubuntu for windows
  • surface 优惠
  • win7 系统启动
  • mac通知中心设置方法
  • Mac怎么更改锁屏密码
  • xp系统做完了进不去
  • linux中ls命令的功能
  • win10系统的优化
  • 安装怎么弄
  • linux 怎么样
  • windows8使用技巧
  • python文本
  • jquery给复选框赋值
  • 税务登记注销证明是什么样的
  • 增资注册资本
  • 提高税务管理水平,降低税务风险
  • 马尼拉清关HS几位
  • 税务申报如何网上申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设