一、什么是LRU

最近最少使用的内存管理算法

长期不被使用的数据,在未来被使用的概率也不大,所以当内存达到一定的交换阈值,会将最近最少使用的数据移除。

二、使用方法

采用哈希表双向链表结合方式,使得访问数据。插入数据的效率达到O(1)。

哈希表: unordered_map<int,list<int,pair<int,int>::iterator>
链表: list<pair<int,int>>

采用哈希表可以使得查找效率达到O(1) ,哈希表的第二个值存储链表的迭代器

三、代码(内有注释)

class LRUCache {public:LRUCache(int capacity) {//确定链表的节点数_capacity=capacity;}//查找节点值,直接从哈希表中查找,找不到返回-1//找到的话,找到节点值,然后将这个节点前后的节点相连,将此节点移动的链表的最后位置//此处采用list自带的splice 函数 (哪个位置,链表,移动链表的那个节点);  int get(int key) {auto umit=_hashMap.find(key);if(umit!=_hashMap.end()){LRU_LST_IT listIt=umit->second;int value=listIt->second;_listCache.splice(_listCache.end(),_listCache,listIt);//连接左右,取出值放在后面//_listCache.erase(listIt);//_hashMap.erase(key);//_listCache.push_back(make_pair(key,value));//_hashMap[key]=--_listCache.end();return value; }else{return -1;}}//插入节点//当前哈希表中是否存在//存在则直接将当前节点移动到链表最后//不存在则判断链表个节点个数是否满了//满了,则删除掉最前面的节点和哈希表中的最前面节点信息//然后将新节点插入到链表后面,并且构建哈希表的key-value信息////不满则直接在链表后面插入新节点,并且构建哈希表的key-value信息   void put(int key, int value) {auto umit=_hashMap.find(key);if(umit!=_hashMap.end()){//auto endit=_listCache.end();LRU_LST_IT ltIt=umit->second;ltIt->second=value;_listCache.splice(_listCache.end(),_listCache,umit->second);}else{if(_listCache.size()==_capacity){_hashMap.erase(_listCache.front().first);_listCache.pop_front();}_listCache.push_back(make_pair(key,value));_hashMap[key]=--_listCache.end();    }}
private:typedef list<std::pair<int,int>>::iterator  LRU_LST_IT;typedef std::pair<int,int> LRU_LST;
//链表定义 哈希表定义 节点个数list<LRU_LST> _listCache;unordered_map<int,LRU_LST_IT> _hashMap; int _capacity;
};

四、图

LRU(leastLeast Recently Used)相关推荐

  1. 操作系统之虚拟存储管理 java python 实现 最优(Optimal)置换算法 先进先出(FIFO)页面置换算法 LRU(Least Recently Used)置换算法

    操作系统之虚拟存储管理 实验内容:模拟请求分页虚拟存器管理技术中的硬件地址变换.缺页中断以及页式淘汰算法,处理缺页中断. 实验目的:清楚认识请求分页管理. 最佳(Optimal)置换算法 其所选择的被 ...

  2. LRU(Least Recently Used)算法简单介绍

    文章目录 LRU算法简介 使用场景 简单实现 简单介绍 LRU算法简介 LRU英文翻译过来就是least recently used,字面意思就是最近最少使用,说白了就是一种淘汰算法,当有新的元素插入 ...

  3. LRU(Least Recently Used)缓存淘汰策略算法

    LRU LRU(Least Recently Used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高". ...

  4. LRU(least recently used)算法浅析

    LRU(Least recently used)算法,顾名思义:最近最少使用. LRU-1算法 算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的 ...

  5. 最近最少使用LRU(Least Recently Used)算法java实现

    最近最少使用LRU(Least Recently Used)算法java实现 一.使用LinkedHashMap算法实现 二.手撸 LRU 算法实现(Hash表 + 双向链表) 三.总结 最近最少使用 ...

  6. 代码写对了还挂了?程序媛小姐姐从 LRU Cache 带你看面试的本质

    来源 | 码农田小齐 责编 |  Carol 前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码 ...

  7. 从 LRU Cache 带你看面试的本质

    前言 在讲这道题之前,我想先聊聊「技术面试究竟是在考什么」这个问题. 技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码大家都会写,那面试为什么还在考这些题?那为什么 ...

  8. java 最少使用(lru)置换算法_「面试」LRU了解么?看看LinkedHashMap如何实现LRU算法...

    以下内容均是本人原创,希望你看完之后能有更多更深入的了解,欢迎关注➕ 问题:使用Java完成一个简单的LRU算法 什么是LRU算法 LRU(Least Recently Used),也就是最近最少使用 ...

  9. 如何设计LRU Cache算法

    前言 相信有的伙伴在面试的过程中,或多或少的会被问到redis的内存淘汰策略,可能大部分人都知道都有哪些对应的策略,毕竟对于八股文的套路大家肯定早已铭记于心.但是当面试官问你如何实现或者让你去写一个对 ...

最新文章

  1. 带无线驱动的linux版本,怎么在Linux里查询无线网卡的驱动程序版本
  2. python使用符号#表示单行注释-【经济金融及Python应用讲义】Python编程规范之注释...
  3. 6.项目资源管理总结
  4. windows 环境下mysql的操作浅析
  5. Chrome DevTools进阶教程
  6. 计算机系统的工作方式,某计算机系统输入/输出采用双缓冲工作方式,其工作过程如下图所示,假设磁盘块与缓冲 - 信管网...
  7. 插入排序(边输边排)
  8. Spring注解@ConfigurationPropertie
  9. VALSE学习(十六): Visual Question Generation and Answering-视觉问题生成和视觉问题
  10. Spark-Mllib(二)基本统计
  11. React中的三种类型组件介绍
  12. 用拉格朗日插值法,牛顿插值和分段线性插值计算近似值
  13. win10系统cf玩一局就服务器断开,win10系统玩cf游戏经常自动退出的详细步骤
  14. SD卡和TF卡的区别/差异
  15. html导航栏背景图片,页面导航栏滚动时改变导航栏背景样式及回到顶部
  16. 携程AI和推荐系统的云化实践
  17. 求三个数的最小公倍数的解法之美
  18. 手把手教你用docker 搭建zoolkepper 和 dubbo 的测试环境
  19. 1.回文是指正读和反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈。)2.假设以带头结点的循环链
  20. vuecli 实现导航切换

热门文章

  1. II——caffe+ubuntu14.04 64bit+cuda6.5配置说明——补充
  2. 手机整屏显示数据php,JavaScript实现移动端页面按手机屏幕分辨率自动缩放示例...
  3. Cannot load excludes configuration file
  4. Horizon Clientfor Linux安装过程记录
  5. SpringMVC+Vue项目停车场管理系统
  6. 下三角矩阵在一维空间中的存储检索
  7. CNT-OSI七层参考模型和TCP/IP四层网络协议
  8. 春节共享手抄报素材怎么整理?
  9. python manage.py migrate和 migrate --fake和migrate --fake-initial的区别
  10. Windows10系统下JDK1.8的下载安装及环境变量配置