c语言lru算法,c语言实现lru算法

dfnjsfkhak 12 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言lru算法问题,于是小编就整理了3个相关介绍c语言lru算法的解答,让我们一起看看吧。

  1. lru算法?
  2. lru算法四种实现方式介绍?
  3. LRU算法,缺页是什么概念?怎么计算缺页次数?

lru算法?

LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。

实现LRU

c语言lru算法,c语言实现lru算法-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

1. 用一个数组存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰。

2.利用一个链表来实现,每次新插入数据的时候将新数据插到链表的头部;每次缓存命中(即数据被访问),则将数据移到链表头部;那么当链表满的时候,就将链表尾部的数据丢弃。

3. 利用链表和hashmap。当需要插入新的数据项的时候,如果新数据项在链表中存在(一般称为命中),则把该节点移到链表头部,如果不存在,则新建一个节点,放到链表头部,若缓存满了,则把链表最后一个节点删除即可。在访问数据的时候,如果数据项在链表中存在,则把该节点移到链表头部,否则返回-1。这样一来在链表尾部的节点就是最近最久未访问的数据项。

c语言lru算法,c语言实现lru算法-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

对于第一种方法, 需要不停地维护数据项的访问时间戳,另外,在插入数据、删除数据以及访问数据时,时间复杂度都是O(n)。对于第二种方法,链表在定位数据的时候时间复杂度为O(n)。所以在一般使用第三种方式来是实现LRU算法。

lru算法四种实现方式介绍?

LRU(Least Recently Used,最近最少使用)算法是一种常见的页面置换算法,内存管理和缓存管理等领域。以下是 LRU 算法的四种常见实现方式:

 

c语言lru算法,c语言实现lru算法-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

1. 数组 + 链表

 

- 维护一个数组来存储数据,同时使用一个双向链表来维护数据的使用顺序

- 当访问一个数据时,将其在链表中移到表头位置表示最近使用。

- 当需要淘汰数据时,删除链表的尾节点对应的数组元素

2. 哈希表 + 双向链表

 

- 使用哈希表快速查找数据。

LRU算法,缺页是什么概念?怎么计算缺页次数?

根据LRU算法,需要替换上次使用距现在最远的页面。首先2,3,2这三页进入内存(进程分配到3个页面,切顺序为由内到外,第二个2进入时不缺页,所以共缺页2次),1进入时,内存不满且内存中没有1这个页面即第1个进入内存,所以顺序是2,3,1(缺页1次);下一个进入的是5,替换3(缺页1次),得到2,1,5;下一个进入的是2,内存中有2号页面,进行下一个页面;下一个进入4,4替换1,得到2,5,4(缺页1次);下一个进入5,内存中有5号页面,进行下一个页面;下一个进入3,3替换2,得到3,5,4(缺页1次);下一次进入2,2替换4,得到3,5,2(缺页1次);后面2号和5号内存中均存在,则不需要替换。所以一共发生了7次缺页。你的那个解析有点问题,你不妨画个图看看

到此,以上就是小编对于c语言lru算法的问题就介绍到这了,希望介绍关于c语言lru算法的3点解答对大家有用

标签: 数据项 算法 数据