版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算法设计与分析本节要点CONTENTSLFU缓存算法LFU缓存算法LRU(LeastRecentlyUsed)是最近最少使用算法,每次淘汰使用时间最早的数据。LFU(LeastFrequentlyUsed)是最不经常使用算法,每次淘汰使用频率最低的数据。与LRU一样,LFU也是常用的缓存置换算法,在Redis内部实现了LFU算法。LFU缓存算法LFU算法有两个基本操作:get(key):如果键key存在于缓存中,则返回key对应的值val,否则返回-1。put(key,value):如果键key已存在,则变更其值为value;如果键不存在,则插入键值对(key,value)。当缓存达到其容量capacity时,则应该在插入新的键值对之前,删除使用频率freq最低的键值对。如果存在多个使用频率最低的键值对,则删除使用时间最早的那个。LFU缓存算法根据上述两个基本操作,分析得出:(1)节点应包含3个信息:键key,值val,频率freq。(2)get(key)方法,采用哈希表,建立key到节点的映射。(3)put(key,value)方法,当缓存达到其容量capacity时,需要删除使用频率freq最低的键值对。采用哈希链表,建立freq到链表的映射。(4)需要两个变量:最小频率minfreq,缓存容量capacity。LFU缓存算法哈希表key_table,建立key到节点的映射。LFU缓存算法哈希链表freq_table,建立freq到链表的映射。LFU缓存算法1.get(key)方法如果键key没有在缓存中,直接返回-1。如果key存在于缓存中,则通过哈希表key_table找到key对应的节点p,返回该节点对应的值val。访问后该节点的频率增1,而且访问的时间为最新,需要做以下4处修改。LFU缓存算法a)删除1:在freq_table中,删除freq对应链表中的节点p。如果删除节点p后,freq对应的链表为空,还需要执行删除2,删除该频率的哈希映射。b)删除2:在freq_table中,删除freq的哈希映射,如果最小频率正好为freq(被删除),则更新最小频率minfreq增1。c)插入1:在freq_table中,将新节点(值不变,频率增1)插入到freq+1对应的链表表头(时间最新)。d)插入2:在key_table中,建立key到新节点的映射。LFU缓存算法例如,LFU缓存如下图所示,执行get(2)操作。LFU缓存算法(1)首先通过哈希表key_table找到key对应的节点p,执行a)操作。在freq_table中,删除freq对应链表中的节点p。删除节点p后,频率1对应的链表为空,还需要执行b)操作,删除该频率的哈希映射,更新最小频率minfreq为2。LFU缓存算法(2)因为访问后该节点的频率增1,而且访问的时间为最新,执行c)操作。在freq_table中,将新节点(值不变,频率增1)插入到频率2对应的链表表头(时间最新)。执行d)操作,在key_table中,建立key到新节点的映射。LFU缓存算法2.put(key,value)方法如果key存在于缓存中,则通过哈希表key_table找到key对应的节点p,接下来除了将新节点值改为value之外,与get操作基本一致。如果键key没有在缓存中,需要执行插入操作。插入新节点之前,判断如果缓存已满,则删除使用频率freq最低的键值对。如果存在多个使用频率最低的键值对,则删除使用时间最早的那个。需要做以下5处修改(缓存已满时才需要执行删除)。LFU缓存算法a)删除1:在freq_table中,找到minfreq对应链表的末尾节点q,并删除minfreq对应链表的末尾节点。如果删除末尾节点后,minfreq对应的链表为空,还需要执行删除2,删除该频率的哈希映射。b)删除2:在freq_table中,删除minfreq的哈希映射。这里不需要更新最小频率minfreq,因为插入新节点的频率为1,最后更新minfreq为1即可。c)删除3:在key_table中,删除q节点的哈希映射。d)插入1:在freq_table中,将新节点(键为key,值为value,频率为1)插入到频率1对应的链表表头(时间最新)。e)插入2:在key_table中,建立key到新节点的映射。更新最小频率minfreq为1。LFU缓存算法例如,LFU缓存如图所示,执行put(3,8)操作。LFU缓存算法(1)键key没有在缓存中,需要执行插入操作。此时缓存已满,需要执行a)、c)操作。删除使用频率最低且使用时间最早的那个节点,删除后链表非空,不需要执行b)操作。LFU缓存算法(2)插入新节点,执行a)、c)操作。在freq_table中,将新节点(键为3,值为8,频率为1)插入到频率1对应的链表表头(时间最新)。在key_table中,建立key到新节点的映射。更新最小频率minfreq为1。LFU缓存算法算法实现LFU缓存算法算法分析时间复杂度:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年绍兴市上虞中医医院医护人员招聘笔试备考试题及答案详解
- 2026年漯河市中医院医护人员招聘考试备考试题及答案详解
- 2026年湖北省肿瘤医院医护人员招聘笔试备考试题及答案详解
- 2026年南阳市张仲景医院医护人员招聘笔试参考题库及答案详解
- 2026年宁夏医科大学总医院医护人员招聘笔试备考题库及答案详解
- 2026年天津市长征医院医护人员招聘笔试备考试题及答案详解
- 2026年柳州市中医医院医护人员招聘笔试备考题库及答案详解
- 2026年河北省职工医学院附属医院医护人员招聘考试备考题库及答案详解
- 2026年国家开发银行(四川省分行)人员招聘笔试参考试题及答案详解
- 2026年黑龙江省医院道外分院医护人员招聘笔试参考试题及答案详解
- 2025年湖南省事业单位第一次公开招聘工作人员笔试历年典型考题及考点剖析附带答案详解
- 2026年安徽省体育彩票管理中心编外聘用人员公开招聘11名考试参考题库及答案解析
- 2026重庆物流集团数字科技有限公司招聘3人笔试历年参考题库附带答案详解
- 2026年滨州国有资本投资运营集团有限公司公开招聘国有企业工作人员(15名)笔试参考题库及答案解析
- 2026广西能汇投资集团有限公司校园招聘笔试参考题库及答案解析
- 河南省顶级名校2026届高三年级5月押题导向卷(一)历史试卷(含答案及解析)
- 开封市汽车产业投资有限公司、开封市文心科教投资发展有限公司招聘笔试题库2026
- 市政起重吊装施工方案(3篇)
- 监理实施细则交底书
- 2026年4月自考00043经济法概论(财经类)试题及答案含评分参考
- 2026年二级造价工程师《建设工程造价管理基础知识》考试真题(答案和解析附后)
评论
0/150
提交评论