首页 > 其他分享 >LRU Cache

LRU Cache

时间:2023-09-25 23:38:09浏览次数:29  
标签:Node map 删除 Cache 链表 LRU key 节点

LRU:  "Least Recently Used"(最近最少使用)  hashmap + 双向链表

      当塞满之后 假如还要塞,就把最久没被使用的删除了,把新的加进来就行(可以通过双向链表模拟实现)

  hashmap: key - Node  用于模拟实现 Cache

     

 

双向链表 (Node) O(1)的时间复杂度实现 头部增加 删除节点(任意节点 删除尾部可以先得到last 再 删除)   

(tips: 虚节点 头head  尾巴 tail  不用纠结空指针了)

 

 

 基本工具方法 都写完了 ,下面实现 LRU的两个主要方法 

get(key):

       1. 1map中没有key: 返回-1

       1.2map中有key   先删除节点 再加到头部  返回val就行

put(key,val)

        1. map中有key: 改变对应node的val 然后链表删除节点node  再加到头部

         2.map中没有key ---- 要新增节点了

            2.1 容量没满 : size++

                                     新建节点 temp

                                     链表 头部增加 temp,

                                    map中put (key,Node)

           2.2 容量满了:  删除最后一个节点

                                    map中remove最后一个节点所对应的key和节点

                                    新建节点 temp

                                     链表 头部增加 temp,

                                    map中put (key,Node)

标签:Node,map,删除,Cache,链表,LRU,key,节点
From: https://www.cnblogs.com/2801554297phw/p/17729108.html

相关文章

  • python 缓存机制如何实现(cacheout)
    Python缓存机制可以使用第三方库cacheout来实现。cacheout提供了一个Cache类,它支持多种缓存策略,包括LRU、FIFO、LFU和TTL。Cache类的基本使用方法如下:1.安装cacheout:pipinstallcacheout2.导入Cache类:fromcacheoutimportCache3.创建Cache对象:cac......
  • LRU缓存实现
    一.LRU缓存实现使用双向链表保证O(1)的优先度更改,同时当做优先队列维护插入顺序同时这里要结合哈希表,保证更改想要的节点/*定义Node双向链表节点定义remove进行删除节点(只删除节点在链表中的关系)定义update更新指定节点的优先度定义insert插入新的节点*/classLR......
  • 力扣---146. LRU 缓存
    请你设计并实现一个满足  LRU(最近最少使用)缓存 约束的数据结构。实现 LRUCache 类:LRUCache(intcapacity) 以 正整数 作为容量 capacity 初始化LRU缓存intget(intkey) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。voidput(intkey,......
  • C++面试可能会用到的Cache
    LRUCache描述:考虑维护一个按照最近的使用时间来排序的链表,查询操作去哈希表中查当前key所对应的节点的指针,然后把该节点删除后再插入到链表首。插入操作的话先查询当前的key是否存在,如果存在的话先把当前key所对应的节点删除;如果链表已经满了的话就把链表尾部的元素删除,考虑完这......
  • 从安卓模拟器中获取 expo-av 库录音得到的音频文件 file:///data/user/0/mo.com.nccl.
    在使用expo-av录制音频时,录制结束通过recording.getURI()可以获取得到的音频文件的地址。想要获取该文件可以通过发送请求的方式:consturi=recording.getURI();letresponse=awaitfetch(uri);letblob=awaitresponse.blob();如果想直接根据文件路径找到这个文......
  • ClassNotfoundException:java.net.InetAddress$CacheEntry
    一个需求,需要修改本地的dns解析,去验证业务的正确性,修改本地的hosts文件需要频繁的修改本地磁盘文件。使用工具包(https://github.com/tanhaichao/javahost)这个工具类实际是通过反射机制,去修改了InetAddress中的cache值,来实现dns解析的修改。CloseableHttpClient方法在做connect的......
  • 缓存Cache
    研究生课程老师给了一篇论文,是关于缓存的,看完Abstract一脸懵逼之后决定来恶补一下,视频是观看的计算机组成原理(哈工大刘宏伟),这个随笔里的截图什么也都是视频里直接截图的,我只是想做个笔记自己之后再看~~~。一、缓存存在的目的程序局部性原理:通俗来讲就是一个变量在程序运行过程......
  • 手动下载并安装 PHP 和 WinCache
    https://learn.microsoft.com/zh-cn/iis/application-frameworks/scenario-build-a-php-website-on-iis/configuring-step-1-install-iis-and-php手动下载并安装PHP和WinCache打开浏览器到 WindowsforPHP下载页 并下载PHP非线程安全zip包。从 适用于PHP的......
  • 浅析Postgresql cache hit ratio
    一、查找cachehitratio 查看cachehitratio 这个东西其实放到其他数据库也是一样,如果你的内存对于系统的缓冲支持不足,需要的数据无法驻留在内存,经常会产生faultpage(有些数据库对于读取的数据不在内存中的一种叫法),那就必须要要查看你的一个系统参数cachehitratio,......
  • KVCache原理简述
    在GPT的推理过程中,它根据完整的提问和回答的已生成部分,来生测下一个词(的概率)。例如,我们的提问是【天王盖地虎,】,回答是【宝塔镇河妖。】。那么第一次,GPT根据【天王盖地虎,】生成【宝】,之后根据【天王盖地虎,宝】生成【塔】,以此类推,直到碰上终止符。这里面提问【天王盖地虎,】的QKV......