【一】LRU Cache的相关概念

LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache?狭义 的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较 快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度 差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种 意义上的Cache── 称为Internet临时文件夹或网络内容缓存等。

Cache的容量是有限的,因此当cache的容量用完之后,而又有新的内容需要添加进来时,就需要挑选并且舍弃原有的部分内容,从而腾出空间来释放新的内容,LRU Cache的替换原则就是将最近最少使用的类容去替换掉,其实LRU Cache翻译成最久未使用会更加的贴合形象,因为该算法每次替换掉的就是一段时间内最久没有使用过的内容。

【二】LRU Cache的模拟实现

struct DLinkedNode
{int key;int value;DLinkedNode* prev;DLinkedNode* next;DLinkedNode():key(0),value(0),prev(nullptr),next(nullptr){}DLinkedNode(int _key, int _value):key(_key), value(_value), prev(nullptr), next(nullptr){}};class LRUCache {
private:unordered_map<int, DLinkedNode*> cache;DLinkedNode* head;DLinkedNode* tail;int Size;int Capacity;
public:LRUCache(int capacity){this->Capacity = capacity;this->Size = 0;this->head = new DLinkedNode();this->tail = new DLinkedNode();head->next = tail;tail->prev = head;}int get(int key){if (!cache.count(key)) {return -1;//如果key不存在,则可以直接返回-1}DLinkedNode* node = cache[key];//从哈希表中找到它的为止moveToHead(node);//将其移动到头节点return node->value;}void put(int key, int value){if (!cache.count(key)){//如果这个key不存在,那就创立一个新的节点DLinkedNode* node = new DLinkedNode(key, value);//添加进哈希表cache[key] = node;//添加到双向链表的头部addToHead(node);Size++;if (Size > Capacity) {DLinkedNode* removed = removeTail();cache.erase(removed->key);//一定要删除,防止内存泄露delete removed;Size--;}}else {//如果key存在,就修改它的val值,然后移动到开头DLinkedNode* node = cache[key];node->value = value;moveToHead(node);}}void addToHead(DLinkedNode* node){node->prev = head;node->next = head->next;head->next->prev = node;head->next->next = node;}void removeNode(DLinkedNode* node){node->prev->next = node->next;node->next->prev = node->prev;}void moveToHead(DLinkedNode* node){removeNode(node);//移除这个元素addToHead(node);//向头节点增加这个元素}DLinkedNode* removeTail(){DLinkedNode* node = tail->prev;removeNode(node);return node;}};

【三】LUR Cache实现的基本原理

实现LUR Cache的方式有很多,但是我们采用最简单的方式,就是使用哈希表和双向链表的方式来进行实现,使用双向链表是因为双向链表是可以在任意的位置进行插入和删除,使用哈希表是因为哈希表的增删查改也是O(1)。

以上就是这期的全部内容了,如果觉得还可以的话,请一键三连吧,如果哪里有问题还请位于评论区进行斧正。

《LRU Cache》相关推荐

  1. 计算机信息管理试卷答案,计算机信息管理专业《计算机组成原理》试卷B和参考答案4...

    <计算机信息管理专业<计算机组成原理>试卷B和参考答案4>由会员分享,可在线阅读,更多相关<计算机信息管理专业<计算机组成原理>试卷B和参考答案4(6页珍藏版 ...

  2. 《计算机组成原理》学习笔记

    目录 第一章 计算机系统概论 1.计算机的软硬件概念及系统的层次结构 2.计算机的基本组成 3.计算机体系结构与组成 4.冯·诺伊曼机基本组成.特点 5.计算机基本概念:CPU(由哪几部分构成)机器字 ...

  3. 02325《计算机系统结构》自考大题:第 4 章

    复习总目录   02325<计算机系统结构>自考复习重点目录 第 4 章 存储体系 1. 页表法地址映像 历史考题: 题目描述:根据页表法 映像表 和 页面大小 计算 虚地址对应的实地址 ...

  4. 20145220韩旭飞《网络对抗》Exp6 信息搜集与漏洞扫描

    20145220韩旭飞<网络对抗>Exp6 信息搜集与漏洞扫描 信息搜集 whois查询 以百度的网址为例,使用whois查询域名注册信息: 从上图中可以得到3R注册信息,包括注册人的名字 ...

  5. 计算机原理多少学分,《计算机组成原理》学分互认复习题.doc

    <计算机组成原理>学分互认复习题 <计算机组成原理>学分互认复习题 一.单项选择题 1.若16进制数为13F,则其对应的八进制数为 ( ) B.477 2.若十进制数为65,则 ...

  6. 计算机应用基础 a)卷,《计算机应用基础》(A卷)44648

    <计算机应用基础>(A卷)44648 (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 <计算机应用基础>复习 ...

  7. 《现代操作系统》(第4版)文件系统 课后习题解答

    写在前面: 本文为学习<现代操作系统>(第4版)的记录,如有错误,请指正交流. 文章目录 上半部分 1-22题 下半部分 23~42题 编程题部分(略) 上半部分 1-22题 解答 You ...

  8. 0362计算机应用基础在线考试,0362《计算机应用基础》(本科)2017年6月期末考试指导.doc...

    0362<计算机应用基础>2017年6月期末考试指导 一.考试说明 1.考试形式:在线考试 2.考试时间:90分钟 3.考试题型及所占分数如下: (1)判断题(每题1分,共10小题,计10 ...

  9. 《计算机组成原理》第04章在线测试

    <计算机组成原理>第04章在线测试 答题须知:1.本卷满分20分.            2.答完题后,请一定要单击下面的"交卷"按钮交卷,否则无法记录本试卷的成绩. ...

最新文章

  1. 快速写出较好CSS的5种方法
  2. Linux权限管理 - 特殊权限之文件特殊权限
  3. linux查找乱码文件,linux删除乱码文件或文件夹
  4. 《程序设计与数据结构》第3周学习总结
  5. 刘作虎曝光一加7真机视频 最流畅的手机来了!
  6. 程序员因为一件衣服收获了爱情,真甜!
  7. PowerDesigner生成的建表脚本中如何把对象的双引号去掉
  8. 栈和队列基本概念,顺序栈的表示和实现
  9. 《人件》(Peopleware)文摘
  10. IT服务管理(一)服务的演变与整体观
  11. 使用 hydra 破解路由器密码
  12. 地图比例尺与空间分辨率之间的关系_航高、分辨率与比例尺的关系
  13. mysql按月创建分表_MySQL之按月拆分主表并按月分表写入数据提高数据查询速度...
  14. 吉他软件打谱常用的的音符时值
  15. MySQL数据库期末考试试题及参考答案(08)
  16. oracle 删除数据违反约束条件,Oracle启动和禁用约束及删除违反约束的记录
  17. 国家标准《信息技术 人工智能 知识图谱技术框架》第三次编辑会成功召开
  18. 虚拟现实初探——【第一天】概述-1
  19. 使用 DS-MDK 开发 NXP iMX7
  20. Python基础练习之名片管理器

热门文章

  1. 微信公众号添加word文档附件教程_公众号添加Excel、PDF、PPT等附件教程
  2. 【XSY2708】hack 网络流
  3. ![CDATA[]] 的基本介绍
  4. 微信公众号分享给微信好友和朋友圈
  5. 树莓派 MFRC522 读取
  6. 通过数据分析,了解外国人眼里的真实李子柒
  7. 华为 2017 实习生招聘笔试题
  8. 设计模式(三)策略模式——在Spring中使用策略模式
  9. 2.28loadrunner
  10. 蓝桥杯-填空题Ctrl+F