《征服数据结构》LRU缓存

news2024/9/22 17:21:30

摘要:

1,LRU的介绍

2,LRU元素的添加

3,LRU元素的读取

4,LRU完整代码实现

1,LRU的介绍

LRU(Least Recently Used)最近最少使用,它是一种缓存淘汰策略。也就是说在缓存容量满的时候,我们需要删除一些元素,删除的原则就是越久没被使用的越容易被删除。

举个简单例子,比如你桌子上的书堆满了,需要拿掉一部分,你肯定是优先拿掉那些很久没有看的书,经常看的书肯定会优先留下来。

LRU要做的就是根据元素使用的时间来保持它们的顺序,维持相对顺序的数据结构使用的是双向链表。

如下图所示,最近被使用的元素会靠近链表头部,越久没被使用的元素越靠近尾部,删除的时候优先删除离尾部最近的元素,其中链表的头节点 head 和尾节点 tail 是不存储任何数据的。

11e64e40969e97c7249629260374476d.png

我们先来看下链表的节点类,不熟悉双向链表的可以先看下前面讲的《双向链表》。

Java 代码:

// 双向链表的节点类
class LinkedNode {
    int key, val;// 节点的key和val值
    LinkedNode pre;// 指向前一个节点的指针
    LinkedNode next;// 指向后一个节点的指针
}

C++ 代码:

// 双向链表的节点类
struct LinkedNode {
    int key, val;// 节点的key和val值
    LinkedNode *pre = nullptr;// 指向前一个节点的指针
    LinkedNode *next = nullptr;// 指向后一个节点的指针
};

2,LRU元素的添加

LRU中的元素是根据键值对存储在map中的,关于map的知识点可以看下前面的《散列表》,双向链表只是维护元素使用的时间顺序。

在添加的时候如果 key 值已经存在了,我们直接更新value值,更新完之后要把它重新插入到链表的前面,如下图所示。

973b47d090e8e438d68c764f867e6c15.png

添加的时候如果 key 值不存在,直接插入到链表的前面,如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2 part2

数据代理 通过defineProperty里面传入obj2和x&#xff0c;然后get和set下读取接收下然后再接收set中给对象x用value接收下&#xff0c;这样就能两个数据读取和接收了 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>何…

printk 操作等级:修改系统日志等级

这是系统日志的等级&#xff0c;在kern_levels.h文件里面 这是printk 函数前面部分先消息等级&#xff0c;中间部分就是&#xff0c;应用层调的printf的格式化字&#xff0c;后面部分就是可变参数 所以信息的等级大于终端的等级才会被打印&#xff0c;命令&#xff0c;cat /pro…

远程连接vscode无法转到定义

遇到用vscode打开远程服务器运行代码的过程中&#xff0c;无法利用插件跳转到定义&#xff08;ctrl鼠标左键///或者F12&#xff09; 问题可能出在两个地方&#xff0c;一个是插件&#xff0c;找到python插件 点击扩展设置&#xff0c;找到language server设置 这里选中pylance…

springboot调用sap接口传输数据,RFC协议接口调用,包含linux,windows部署

背景&#xff1a;我这边需要将一串数组写入到sap系统中&#xff0c;原本希望sap能提供rest形式接口&#xff0c;可惜sap开发那边说sap对外都是rfc接口&#xff0c;现在记录一下sap接口对接&#xff0c;给其他小伙伴提供点经验。 1、首先必须有对应的原料&#xff0c;驱动jar包…

Web应用服务器Tomcat

一、tomcat Tomcat是Java语言开发的&#xff0c;Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat属于轻量级应用服务器&#xff0c;在中小型系统和并发…

【微信小程序】自定义组件 - 数据监听器

1. 什么是数据监听器 2. 数据监听器的基本用法 组件的 UI 结构如下&#xff1a; 组件的 .js 文件代码如下&#xff1a; 3. 监听对象属性的变化 数据监听器 - 案例 案例效果 2. 渲染 UI 结构 3. 定义 button 的事件处理函数 4. 监听对象中指定属性的变化 5. 监听对象中所…

Vite + Vue 3 项目中实现路由自动化完整步骤。

下面是从创建项目到实现路由自动化的完整步骤 在 Vite Vue 3 项目中实现路由自动化可以通过使用文件系统路由生成器来简化路由管理过程。以下是实现路由自动化的完整步骤&#xff1a; 1.创建 Vite Vue 3 项目 如果你还没有一个 Vite Vue 3 项目&#xff0c;可以使用以下命令…

Oracle开始严查Java许可!

0x01、 前段时间在论坛里就看到一个新闻&#xff0c;说“Oracle又再次对Java下手&#xff0c;开始严查Java许可&#xff0c;有企业连夜删除JDK”&#xff0c;当时就曾在网上引起了一阵关注和讨论。 这不最近在科技圈又看到有媒体报道&#xff0c;Oracle再次严查&#xff0c;对…

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 应用开发安全(含闯关习题)

学完时间&#xff1a;2024年8月23日 学完排名&#xff1a;第1748名 一、安全设计理念 以硬件TCB作为安全信任基础,软硬结合的安全设计 HarmonyOS系统安全设计基础: 基于最小的可信计算基础TCB;硬件主密钥,加解密引擎关键安全组件基于TEE可信运行环境;TEE&#xff08;Truste…

自编码器(Autoencoder, AE):深入理解与应用

自编码器&#xff08;Autoencoder, AE&#xff09;&#xff1a;深入理解与应用 引言 自编码器&#xff08;Autoencoder, AE&#xff09;是一种通过无监督学习方式来学习数据有效表示的神经网络模型。其核心思想是通过编码器将输入数据压缩成低维潜在表示&#xff0c;然后通过…

Element-UI自学实践(二)

因上篇 Element-UI自学实践&#xff08;一&#xff09; 文字过多&#xff0c;不便于观看&#xff0c;故另起一篇。 5. 反馈组件 反馈组件用于与用户进行交互&#xff0c;提供即时反馈&#xff0c;包括警告&#xff08;Alert&#xff09;、消息提示&#xff08;Message&#x…

Datawhale X 李宏毅苹果书 AI夏令营task1-3笔记

1.1 通过案例了解机器学习 机器学习基础 首先简单介绍一下机器学习&#xff08;Machine Learning&#xff0c;ML&#xff09;和深度学习&#xff08;Deep Learning&#xff0c;DL&#xff09;的基本概念。机器学习&#xff0c;顾名思义&#xff0c;机器具备有学习的能力。具体…

[笔记] 某振动分析软件的可能侦测范围

1.可检测量【部分】 后面有图例&#xff0c;很好找&#xff0c;其实。可以在bing.com搜索image. {"type": "sdc-application-types","version": 1,"data": [{"name": "Disabled ","type": "disa…

<数据集>遥感船舶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;15047张 标注数量(xml文件个数)&#xff1a;15047 标注数量(txt文件个数)&#xff1a;15047 标注类别数&#xff1a;25 标注类别名称&#xff1a;[Aircraft Carrier, Auxiliary Ships, Other Ship, Other Warship,…

实车测试的目的和作用 (Purpose and function of real vehicle test)

实车测试的目的和作用主要在于验证整车控制器软件的功能&#xff0c;确保其在实车环境下的安全性和稳定性。实车测试是整车控制器软件发布前不可或缺的一个测试环节&#xff0c;主要目的是在实车环境上验证VCU最常规的功能&#xff0c;对HIL测试台架无法模拟的工况进行补充测试…

孤独症托养无需家长陪护中心:守护每一份独特的星光

在星贝育园&#xff0c;作为一所专业的孤独症寄宿学校&#xff0c;我们致力于为孤独症儿童提供最全面、最专业的康复与成长环境。以下是我们的主要优势&#xff1a; 一、专业的师资团队 星贝育园拥有一支经验丰富、专业素养极高的教师团队。我们的教师不仅具备深厚的…

【杨辉三角】打印杨辉三角前10行

杨辉三角&#xff08;Pascals Triangle&#xff09;是一个由数字组成的三角形&#xff0c;具有许多有趣的数学性质。每个数字是其上方两个数字之和。它的第一行和第一列都是1&#xff0c;形成的结构如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 …

TCP 粘包问题

TCP是一个面向字节流的传输层协议。“流” 意味着 TCP 所传输的数据是没有边界的。这不同于 UDP 协议提供的是面向消息的传输服务&#xff0c;其传输的数据是有边界的。TCP 的发送方无法保证对方每次收到的都是一个完整的数据包。于是就有了粘包、拆包问题的出现。粘包、拆包问…

为什么最近多模态大模型工作中用Q-Former结构的变少了?

前言 训练资源有限的情况下&#xff08;有限的 GPU、训练数据等&#xff09;&#xff0c;Q-former 也只是一个“低效”压缩器。如果想减少图片 token 数量来降低训练代价&#xff0c;简单的 AdaptiveAveragePooling 就够了。 转载自丨PaperWeekly 我们组最近的工作 DeCo: De…

Eagle 4.0:强大插件加持的素材收集管理工具

期待很久的全新 Eagle 4.0 现已正式推出了&#xff01; Eagle 是一款 Win / Mac 双平台素材收集管理工具&#xff0c;它可以帮你高效整理电脑中的图片、字体、视频、音频等各种素材&#xff0c;是众多设计师、美图收集爱好者的信赖之选。 4.0 版是一次全面的革新&#xff0c;从…