ZBLOG

lru算法

LRU(Least Recently Used)算法是一种常用的缓存淘汰算法,它根据数据的访问时间来确定哪些数据应该被保留在缓存中。

LRU 算法的基本思想是,当缓存空间已满时,优先淘汰最近最少使用的数据。具体实现可以使用哈希表和双向链表来构建一个 LRU 缓存结构。

以下是一个简单的 LRU 算法实现示例:

  1. 定义一个哈希表用于快速查找缓存中的数据。
  2. 定义一个双向链表用于维护缓存中数据的访问顺序,最近访问过的节点放在链表头部。
  3. 当访问一个数据时,如果存在于缓存中,则将其从原位置删除,并重新插入到链表头部表示最近使用过。
  4. 当需要淘汰数据时,删除链表尾部节点,并从哈希表中删除对应项。

以下是 JavaScript 的示例代码:

class LRUCache {
  constructor(capacity) {
    this.capacity = capacity;
    this.cache = new Map();
  }

  get(key) {
    if (this.cache.has(key)) {
      const value = this.cache.get(key);
      this.cache.delete(key);
      this.cache.set(key, value); // 将该项移到链表头部表示最近使用
      return value;
    }
    return -1;
  }

  put(key, value) {
    if (this.cache.has(key)) {
      this.cache.delete(key);
    } else if (this.cache.size >= this.capacity) {
      const oldestKey = this.cache.keys().next().value; // 获取链表尾部的键
      this.cache.delete(oldestKey);
    }
    this.cache.set(key, value);
  }
}

// 使用示例
const cache = new LRUCache(2); // 容量为2的缓存

cache.put(1, 'a');
cache.put(2, 'b');

console.log(cache.get(1)); // 输出: 'a'

cache.put(3, 'c'); // 缓存已满,移除最近未使用的数据项2
console.log(cache.get(2)); // 输出: -1,因为数据项2已被淘汰

cache.put(4, 'd');
console.log(cache.get(1)); // 输出: 'a'
console.log(cache.get(3)); // 输出: -1,因为数据项3已被淘汰
console.log(cache.get(4)); // 输出: 'd'

这是一个简单的实现,并不包含所有可能的情况和优化。在实际应用中,还可以考虑通过双向链表来提高删除操作的效率,或者使用现有库中提供的 LRU 缓存实现。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=3540

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?