首页 > 编程知识 正文

LRU算法优点

时间:2023-05-06 04:52:01 阅读:178344 作者:610

概念:

LRU(leastrecentlyused )是丢弃最近不再访问的数据。 实际上,LRU认为,如果有最近使用的数据,将来访问的概率也很多,如果最近没有访问,将来访问的概率也很低。 “但其实这并不准确。 但是,由于LRU算法简单,不会浪费存储空间,所以还在广泛使用。

LRU原理:

LRU一般采用链表的死升实现,便于快速移动数据位置。 我在网上找了图,感觉画得很厉害,所以贴了。 为了说明问题~~~~~感谢这张图的作者! 呃! 呃! 呃!

有两种实现LRU的方法。 在缓存命中后,是否将此数据缓存项放在LRU队列的开头。

首先,此图像显示了如何实现LRU。 也就是说,在缓存访问命中后,使此数据缓存条目到达LRU队列的开头。 步骤5、将e插入缓存池后,此缓存池已满,在步骤6中插入f后,考虑丢弃最近未访问的数据,即a。 请参阅。 请参阅。 请参阅。 )在步骤7中,c被访问,此时,c已经移动到链表的头部,因为最近被访问过(在步骤8中,将g保存在缓存中后,如果g位于链表的开头,b只会被淘汰。 请参阅。 请参阅。 请参阅。

插入和删除链表的时间复杂度都是o(1),所以不使用链表,不使用数组。 请参阅。 请参阅。 请参阅。 请参阅。 (这篇文章是参考了别人的,我还不太清楚,请让我研究一下。 请参阅。 请参阅。 ) )

另外,关于数据缓存项目不移动到LRU开头的方式,将在以下例题中详细说明。

让我们贴一个例题:

例如:

大家一起做问题吧!

——3354——3——3——3——33——333——33——333334——3——333——33333——3333——333——333——3333——3333——333333——33333——33334333333333——333333

解:

正题有两种解答。

1 .缓存命中后,此数据缓存条目不应移动到链表的开头:

不调整缓存项目内容的快照包括:

1. 1

2. 5 1

3. 5 1

4. 3 5 1

5. 3 5 1

6. 2 3 5 1

7. 4 2 3 5(淘汰1 ) )。

8. 1 4 2 3(淘汰5 ) )。

9(4)2)命中2

到达步骤6时,缓存池已满,开始淘汰,淘汰了两次,最后淘汰了5

2 .缓存命中后,此数据缓存条目将移动到链表的开头

1. 1

2. 5 1

3. 1 5

4. 3 1 5

5 .5 3 1

6. 2 5 3 1

7. 4 2 5 3(淘汰1 ) )。

8. 1 4 2 5(淘汰3 ) )

9 .2 1 4 5

两次淘汰,最后三次淘汰

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。