油边机 东莞网站建设四川德行天下建设工程有限公司网站

web/2025/10/6 0:33:07/文章来源:
油边机 东莞网站建设,四川德行天下建设工程有限公司网站,企业网站模板网页模板,中国建设安全协会网站目录 1.什么是LRU算法 2.LRU算法原题描述 3.LRU算法设计 4.LRU算法细节分析 5.代码实现 1.什么是LRU算法 就是一种缓存淘汰策略。 计算机的缓存容量有限#xff0c;如果缓存满了就要删除一些内容#xff0c;给新内容腾位置。但问题是#xff0c;删除哪些内容呢#…目录 1.什么是LRU算法 2.LRU算法原题描述 3.LRU算法设计 4.LRU算法细节分析 5.代码实现 1.什么是LRU算法 就是一种缓存淘汰策略。 计算机的缓存容量有限如果缓存满了就要删除一些内容给新内容腾位置。但问题是删除哪些内容呢我们肯定希望删掉哪些没什么用的缓存而把有用的数据继续留在缓存里方便之后继续使用。那么什么样的数据我们判定为「有用的」的数据呢 LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used也就是说我们认为最近使用过的数据应该是是「有用的」很久都没用过的数据应该是无用的内存满了就优先删那些很久没用过的数据。 2.LRU算法原题描述 举一个例子 假设我的手机只允许我同时开 3 个应用程序现在已经满了。那么如果我新开了一个应用「时钟」就必须关闭一个应用为「时钟」腾出一个位置关那个呢 按照 LRU 的策略就关最底下的因为那是最久未使用的然后把新开的应用放到最上面 现在你应该理解 LRULeast Recently Used策略了。 我们先从一道LRU设计算法题开始 运用你所掌握的数据结构设计和实现一个 LRU (最近最少使用) 缓存机制。支持以下操作 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中则获取关键字的值总是正数否则返回 -1。 写入数据 put(key, value) - 如果关键字已经存在则变更其数据值如果关键字不存在则插入该组「关键字/值」。当缓存容量达到上限时它应该在写入新数据之前删除最久未使用的数据值从而为新的数据值留出空间。 O(1) 时间复杂度内完成这两种操作 3.LRU算法设计 分析上面的操作过程要让 put 和 get 方法的时间复杂度为 O(1)我们可以总结出 cache 这个数据结构必要的条件查找快插入快删除快有顺序之分。 因为必须有顺序之分以区分最近使用的和久未使用的数据而且我们要查找键是否已存在如果容量满了要删除最后一个数据每次访问还要把数据插入到队头。 那么什么数据结构同时符合上述条件呢哈希表查找快但是数据无固定顺序链表有顺序之分插入删除快但是查找慢。所以结合一下形成一种新的数据结构哈希链表。 LRU 缓存算法的核心数据结构就是哈希链表双向链表和哈希表的结合体。这个数据结构长这样 在双向链表中特意增加两个节点不用来存储任何数据。使用节点增加/删除节点的时候就可以不用考虑边界节点不存在情况简化编程难度降低代码复杂度。  思想听起来很简单就是借助哈希表赋予了链表快速查找的特性嘛可以快速查找某个 key 是否存在缓存链表中同时可以快速删除、添加节点。回想刚才的例子这种数据结构是不是完美解决了 LRU 缓存的需求 也许大家会问为什么要是双向链表单链表行不行另外既然哈希表中已经存了 key为什么链表中还要存键值对呢只存值不就行了 这样设计的原因必须等我们亲自实现 LRU 算法之后才能理解所以我们开始一步步实现代码吧 4.LRU算法细节分析 新插入的元素或者最新查询的元素要放到链表的头部对于长时间未访问的元素要放到链表尾部所以每次插入或者查询都需要维护链表中元素的顺序。 使用哈希表的原因是查询时间复杂度为O(1)使用双向链表的原因是对于删除和插入操作时间复杂度为O(1)。 其中哈希表中存储的 key 为 Kvalue 为 NodeK,V 的引用双向链表存储的元素为NodeK,V的引用. 对于put操作 ①首先判断缓存中 元素 K 是否存在如果存在则把链表中的元素NodeK, V删除map中的数据K, NodeK, V 不用删除再在链表头部插入元素并更新map直接返回即可 ②缓存不存在并且缓存没有满的话直接把元素插入链表的表头缓存满了的话移除表尾元素最旧未访问元素,将元素K插入表头增加map中的K, NodeK, V, 更新map。 对于get操作 首先要判断 缓存中(map)是否存在如果存在则把该节点删除并在链表头部插入该元素并更新map 返回当前元素即可如果map不存在 则直接返回-1 5.代码实现 public class LRUCache {Entry head, tail;int capacity;int size;MapInteger, Entry cache;public LRUCache(int capacity) {this.capacity capacity;// 初始化链表initLinkedList();size 0;cache new HashMap(capacity 2);}/*** 如果节点不存在返回 -1.如果存在将节点移动到头结点并返回节点的数据。** param key* return*/public int get(int key) {Entry node cache.get(key);if (node null) {return -1;}// 存在移动节点moveToHead(node);return node.value;}/*** 将节点加入到头结点如果容量已满将会删除尾结点** param key* param value*/public void put(int key, int value) {Entry node cache.get(key);if (node ! null) {node.value value;moveToHead(node);return;}// 不存在。先加进去再移除尾结点// 此时容量已满 删除尾结点if (size capacity) {Entry lastNode tail.pre;deleteNode(lastNode);cache.remove(lastNode.key);size--;}// 加入头结点Entry newNode new Entry();newNode.key key;newNode.value value;addNode(newNode);cache.put(key, newNode);size ;}private void moveToHead(Entry node) {// 首先删除原来节点的关系deleteNode(node);addNode(node);}private void addNode(Entry node) {head.next.pre node;node.next head.next;node.pre head;head.next node;}private void deleteNode(Entry node) {node.pre.next node.next;node.next.pre node.pre;}public static class Entry {public Entry pre;public Entry next;public int key;public int value;public Entry(int key, int value) {this.key key;this.value value;}public Entry() {}}private void initLinkedList() {head new Entry();tail new Entry();head.next tail;tail.pre head;}public static void main(String[] args) {LRUCache cache new LRUCache(2);cache.put(1, 1);cache.put(2, 2);System.out.println(cache.get(1));cache.put(3, 3);System.out.println(cache.get(2));} } 如果大家完全理解了LRU算法那么练习结果这个相信大家一眼就可以看出 分析 1.首先我们给出的容量是2先push 1 后push 2那么现在数据存储顺序应该是21 2.我们接下来对于1这个值进行了查询因为1这个值存在所以1这个值被引用了一次1这个值放到最上边返回1现在的顺序是12 3.现在push数据3因为容量只有2所以淘汰掉末尾数据2现在顺序变为31 4.最后查询数据2因为没有数据2所以返回-1顺序不变

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

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

相关文章

wordpress内置编辑器免费seo网站推广

在当今数字化时代,IP地址定位工具成为了许多领域中不可或缺的技术支持,为网络安全、地理定位服务和个性化推荐等提供了重要数据支持。其中,IP数据云作为一种领先的IP地址定位工具,具有一系列功能和优势,本文将对其进行…

做网站的公司还市场吗做任务的正规网站

目录 1 vmware exporter安装配置1.1 vmware exporter介绍1.2 安装 - 使用kubernetes部署1、下载2、修改配置文件3、执行安装4、查看 1.3 安装-使用docker的方式1.4 Prometheus配置1.5 Grafana配置(模板页面还需要修改) 总结 1 vmware exporter安装配置 …

网站com域名上不去cn能深圳信息公司做关键词

一,工具简介 biolatency 跟踪块设备 I/O(磁盘 I/O),并记录 I/O 延迟(时间)的分布,通过 Ctrl-C 可以停止跟踪,并将其以直方图的形式打印出来。 它通过动态追踪blk_族函数(与块设备相关的内核函数)并记录函数的变化,从而收集块设备I/O的延迟信息。它记录I/O延迟的分…

网站建设宗旨抑郁症图片加时间生成器在线制作

这题分块搞一搞,算到最后发现结果就是算矩阵J的行列式,要取模m,那个sign消掉了。 参考文献在这,欧几里德算法的应用,金斌 代码还是比较好写的,python代码 n,mmap(int,raw_input().split()) a[] for i in ra…

公司内部网站源码怎么自己做游戏

标题:【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要! (一)快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数…

免费成品网站下载网站添加支付宝

AI产品发展到现在,消费端的产品应用还受到比较大的限制;但是在B端,已经有了不错的表现。作者总结了AI产品在B端的几款应用,一起来看看表现如何。 生成式AI在B端产品的应用分析© 由 ZAKER 提供 随着今年生成式AI应用的大范围…

公司网站后台是什么制作图片网站

1.chunk拆分对最终效果的影响 2.改进知识的拆分方案 3.AI套件 4.相似性检索的关键:embedding技术 嵌入技术是相似性检索的关键,它能够将数据转换为向量表示,并通过比较向量之间的相似性来实现相似性检索;embedding:将…

邯郸推广网络宣传哪家好优化网站用软件好吗

1.Ctrl鼠标点击函数名(对应的函数名会加下划线) 或 Ctrlg 2.help(function) 在某些情况下方法1失效,比如TensorFlow中的一些函数tf.constant,他只会跳转到一个init文件,并不会展示函数原型。 所以可以这样help(tf.co…

网站建设与维护典型案例小程序模板套用教程

因为本章的内容是使用jq工具配合完成,因此在开始部分会先花一定的篇幅介绍jq机器使用,如果读者已经熟悉jq,可以直接跳过这部分。 先来看应用场景,App 经常会有一些信息展示的列表页,比如商家的菜品、股票的公司、文章的…

深圳百度网站推广广州 网站建设模板

netflix 模式创新单例设计模式是一种软件设计模式,用于将类的实例化限制为一个对象。 与其他创建设计模式(例如抽象工厂 , 工厂和构建器模式)相比,单例将创建一个对象,但也将负责,因此该对象只…

闸北区网站设计与制网站制作服务合同

文章目录 MATLAB句柄函数句柄的简单操作函数 MATLAB句柄 MATLAB平台对于函数调用分为直接调用和间接调用。直接调用即调用子函数。   子函数只能被与它所在M文件同名的主函数或者在M文件内的其他函数调用。一个文件只能有一个主函数。   使用函数句柄可以避免上述问题。句柄…

传奇简单网站模板wordpress设置页面403权限

数字化转型已不再是企业追求效益最大化的手段,而是成为经济发展变革、提升国家数字竞争的核心动力。在此背景下,博睿数据继续发力,隆重推出「数字化运维转型平台」,汇聚了我们对数字化转型的深刻洞见与实践经验,以期为…

做网站怎么加背景图片运营工资一般多少

《VFP参考资料word版》下载地址: 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731452.html

沧州网站设计多少钱专业网站建设电话

Java中的类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责在运行时动态地加载Java类到Java虚拟机(JVM)中。Java的类加载机制是Java核心的一部分,它提供了高度的灵活性和可扩…

网站备案注意安卓市场app下载安装

Spring MVC(Model-View-Controller)是一种基于Java的实现了MVC设计模式的轻量级Web框架。它通过一套注解,可以快速地搭建一个可扩展、易维护的Web应用程序。下面是Spring MVC处理请求的基本流程: 用户发起请求:用户通过…

四川德充建设集团有限公司网站三亚本地网

什么是 Docker 和 Misskey? Docker 是一个开源的应用容器引擎,它可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,包括物理机、虚拟机、云服务等。使用 Docker&#xff0c…

广州网站建设方案案例seo培训机构排名

在使用bootstrap table时可能在很多时候回用的表格来显示数据,如果自己写那肯定没问题,但是数据展示出来就麻烦多了,然而bootstrap table 封装了一套完善的数据表格组件,把从后台请求的数据很容易就展示出来了,bootstr…

长安商城网站建设软件开发图片

可执行程序包括BSS段、数据段、代码段。 在类UNIX系统下可使用size命令查看可执行文件的段大小信息。如size a.out: ~/Desktop/MyC$ size a.outtext data bss dec hex filename1672 600 8 2280 8e8 a.out1.数据段存放已初始化的全…

一帘幽梦紫菱做的网站建设企业网站的哪家好

一、版本说明:MYSQL自从被ORCLE收购后,软件的版本也ORACLE化,整体的感觉就是服务的费用提高了很多,整体的软件的Supports也有相应的提高;MYSQL根据软件的功能可以分成三个版本:社区版、企业版、集群版。社区…

降权查询网站网站建设考察报告

漂亮的目录1、万能的脚本2、内部嵌入引擎方式3、调用NodeJs服务,与之通信方式结论1、万能的脚本折腾无止境,.net core 提供了更多的可能,今天我们就来看看脚本引擎。提起脚本,不得不说说Javascript——WEB互联网世界的一大半江山都…