数据结构:缓存淘汰策略

三种缓存淘汰策略

1.FIFO - First In First Out - 先进先出
2.LFU - Least Frequently Used - 最少 - 使用
3.LRU - Least Recently Used - 最近 - 最少 - 使用


其中LRU使用最广,下面介绍 使用 链表 和 数组 来实现LRU


单链表实现LRU

(1)当访问的数据 - 没有存在 - 于存储缓存的链表中时:
i- 如果缓存链表没满:将数据插入链表表头,时间复杂度为 O(1);
ii - 如果缓存链表满了:删除链表的末位,将新数据添加到 缓存链表 的表头,时间复杂度为 O(1)。
该图为链表未满的情况

(2)当访问的数据 - 存在于 - 存储缓存的链表中时:
将该数据对应的节点,调整到链表表头,时间复杂度为 O(1)。

缓存链表满,从链表尾部开始清理。


数组实现LRU

第一种:数组首位置存放最新访问的数据,缓存满,最先清理数组末尾
(1)最新访问的数据 - 未存在 - 于缓存数组中时:
i - 缓存数组未满:将数据插入到数组首位,数组内的其他数据依次向后移动一位。时间复杂度为 O(n)
ii - 缓存数组满:清理 数组 末尾,再存入新的。
在这里插入图片描述

(2)最新访问的数据 - 存在 - 于缓存数组中时:将该数据移动至数组首位,其他数据依次向后移动。时间复杂度为O(n)
在这里插入图片描述

缓存数组满时,首先清理数组末尾的数据。

第二种:数组末尾存放最新访问的数据,缓存满,最先清理数组首位
(1)最新访问的数据 - 未存在 - 于缓存数组中时:将数据插入到数组末尾,时间复杂度为 O(n)
在这里插入图片描述

(2)最新访问的数据 - 存在 - 于缓存数组中时:将该数据移动至数组末尾,其他数据根据情况依次向前移动,时间复杂度为O(n)
在这里插入图片描述

缓存数组满时,清理数组首位置的元素,剩余元素根据需要依次向前移动。
在这里插入图片描述

补充代码等待!!!

(看文章整理的,如有错误,欢迎指正,感谢。)
侵删

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值