新闻详情

新闻详情

首页 / 资讯中心 / 详情

LRU 缓存算法详解

发布时间:2026/11/4 18:29:53来源:尧图网络
LRU 缓存算法详解
LRU 缓存算法一、什么是 LRULRULeast Recently Used最近最少使用是一种常见的缓存淘汰策略。核心思想当缓存空间满了优先淘汰最久没有被访问过的数据因为我们认为最近被访问过的数据未来更有可能再次被访问。举个生活化的例子你桌面上只能放 3 本书第 4 本要放上来时就把最久没翻过的那本收回书架。二、为什么要用「哈希表 双向链表」实现 LRU 需要同时满足两个操作都要高效O(1)快速查找给定 key能立刻定位到对应的缓存项。快速更新顺序访问某个 key 后要把它移到最近使用的位置容量满时要能快速删除最久未使用的项。数据结构查找插入/删除维护顺序数组O(n)O(n)麻烦哈希表O(1)O(1)不支持双向链表O(n)O(1)天然支持哈希表 双向链表O(1)O(1)O(1)所以经典做法是哈希表unordered_map存key - 链表节点迭代器用于 O(1) 查找。双向链表list按使用时间排序表头是最近使用表尾是最久未使用。三、完整实现代码classLRUCache{private:unordered_mapint,listpairint,int::iterator__hash;// key - 链表节点listpairint,int__list;// 双向链表存 {key, value}int__capacity;// 缓存容量public:LRUCache(intcapacity){__capacitycapacity;}intget(intkey){autoit__hash.find(key);if(it__hash.end())return-1;// 没找到__list.splice(__list.begin(),__list,it-second);// 把节点移到表头最近使用return__list.begin()-second;// 返回 value}voidput(intkey,intvalue){if(get(key)-1){// key 不存在插入新节点__list.insert(__list.begin(),{key,value});__hash[key]__list.begin();if(__list.size()__capacity){// 超出容量淘汰表尾最久未使用intpop_key__list.back().first;__list.pop_back();__hash.erase(pop_key);}}else{// key 已存在更新 value节点已在表头__list.begin()-secondvalue;}}};四、核心操作逐行解读1.get(key)—— 查找并标记为最近使用intget(intkey){autoit__hash.find(key);if(it__hash.end())return-1;__list.splice(__list.begin(),__list,it-second);return__list.begin()-second;}__hash.find(key)O(1) 判断 key 是否存在并拿到它在链表中的迭代器it-second。__list.splice(__list.begin(), __list, it-second)这是整个实现的关键。splice会把it-second指向的节点从原位置摘下接到表头整个过程是 O(1)不需要拷贝数据也不破坏其他节点的链接。这样就把刚访问过的数据移动到了最近使用的位置。2.put(key, value)—— 插入或更新voidput(intkey,intvalue){if(get(key)-1){// 不存在 → 新增__list.insert(__list.begin(),{key,value});__hash[key]__list.begin();if(__list.size()__capacity){// 超过容量 → 淘汰最久未使用的表尾intpop_key__list.back().first;__list.pop_back();__hash.erase(pop_key);}}else{// 已存在 → 直接更新 value此时节点已在表头__list.begin()-secondvalue;}}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉