LRU算法

LeastRecentlyUsedLeast Recently UsedLeastRecentlyUsed 算法,意为“最近最少使用”,这是操作系统内存管理部分重要的一个页置换算法。

解释:LRU chooses that page that has not been used for the longest period of time.

追溯Operating System

Operating System 中特别重要的三个页置换算法:

  • First-In-First-Out (FIFO) Algorithm
  • Optimal Algorithm
  • Least Recently Used (LRU) Algorithm

当然还有很多其他算法,比如LRU Approximation Algorithms,不提……

Optimal Algorithm 与 LRU Algorithm

Optimal Algorithm 为什么是“最优”呢?因为它着眼未来,但实际上,“未来并不可以准确预测”,所以不能在计算机上真正实现,但LRU是可以的。

LRU的思想,恰如其名,着眼于过去,它根据过去的使用做出判断。

简而言之,就是“谁最近没被用过,就把谁换出去”,栈和队列这样的数据结构就可以帮助我们实现这一点。
当然,也可以对页面的引用时间进行计时,通过计时进行页置换。

LRU算法实例

给出一个 reference string :“7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1”,置换顺序如下:(注意下图前三次也是换进去的呀,每个页都是经历Demand Paging才得以从外存换入内存的)

栈实现的解读

比如下图,在 a → b 的时候,相当于把7号页从栈中抽出来放到栈底(注意栈底在顶部),从栈顶换出页,新换入的页插入栈底。(实际上就相当于队列结构啦)

洛谷P1540题

题目要求

P1540题目链接

分析

在有经验的人看来,确实,普通的模拟+使用队列作为辅助数据结构,一个小题。

问题是,你还想到了什么?
没错——LRU算法!

其实这题的背景本身就是OS的虚拟内存页置换算法啊!

AC代码(Java语言描述)

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class Main {public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();Scanner scanner = new Scanner(System.in);int limit = scanner.nextInt(), num = scanner.nextInt(), counter = 0, result = 0;while (queue.size() <= num && result < limit) {int temp = scanner.nextInt();if (!queue.contains(temp)) {queue.offer(temp);result++;}counter++;}for (int i = counter; i < num; i++) {int temp = scanner.nextInt();if (!queue.contains(temp)) {queue.poll();queue.offer(temp);result++;}}scanner.close();System.out.println(result);}
}

总结

LRU算法是一种重要的算法。比起算法本身,更重要的是领会到LRU算法的思想,并能在处理实际问题的时候得以启发,这样就很好啦!

另外,OS的LRU页置换算法也应该深刻理解,这是涉及计算机原理的重要知识。

希望对不懂LRU算法的读者一些启示,也希望帮助对洛谷P1540题理解不深的读者加深理解。
总之,希望对大家有所帮助!

深入理解 操作系统 LRU算法(以洛谷P1540题为例)相关推荐

  1. 深入理解 操作系统 SJF算法(以洛谷P1223题为例)

    CPU Scheduling Algorithms 重要的CPU调度算法如下: FCFS Scheduling(First-Come, First-Served) SJF Scheduling(Sho ...

  2. 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)

    题目要求 P1087题目链接 分析 所谓的"FBI树",其实就是一种二叉树,最后的结果也无非就是二叉树的后序遍历序列. 所以,考察的知识点就是--二叉树基本算法的灵活运用. 本题关 ...

  3. 洛谷刷题C语言:LJESTVICA、FUNGHI、LJESNJAK、AUTORI、PLANINA

    记录洛谷刷题QAQ [COCI2012-2013#5] LJESTVICA 题目背景 Veronica 在音乐学院上学,她拿到了一张只有音符的乐谱,并且需要识别其所使用的音阶. 题目描述 在这个问题中 ...

  4. 贪心策略摘果子(洛谷P1478题题解,Java语言描述)

    题目要求 P1478题目链接 分析 本题的低配版题目链接 → 题解 那个题就是纯水题没啥可写的,我除了贴代码无话可说,但这题吧,虽然不算难,但也可一说. 建议大家移步这里 → 精辟题解 这位爷写了本题 ...

  5. [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP

    传送门:戳我 这道题有两个版本,S和P,S是K等于1的情况,显然可以用线段树水过. P版本就难了很多,洛谷黑题(NOI/NOI+/CTSC),嘿嘿. 我自己也不是很理解,照着题解写了一遍,然后悟到了一 ...

  6. 洛谷刷题C语言:闰年判断、Apples、洛谷团队系统、肥胖问题、三位数排序

    记录洛谷刷题QAQ 一.[深基3.例3]闰年判断 题目描述 输入一个年份,判断这一年是否是闰年,如果是输出 111,否则输出 000. 输入格式 输入一个正整数 nnn,表示年份. 输出格式 输出一行 ...

  7. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

  8. 洛谷刷题C语言:PET、KEMIJA、PROSJEK、KORNISLAV、RESETO

    记录洛谷刷题QAQ 一.[COCI2008-2009#3] PET 题目描述 在一项受欢迎的比赛 Dinner for Five 中,有 555 名选手和 444 名裁判,这 444 个裁判会对每一道 ...

  9. 洛谷刷题C语言:Physics Problem、PARKING、Trol、信息学竞赛、POT

    记录洛谷刷题C语言 「dWoi R1」Physics Problem 题目背景 面对白板上的物理题,王马陷入了沉思 -- 题目描述 有 nnn 个状态,编号为 111 到 nnn.这 nnn 个状态之 ...

最新文章

  1. J2SE核心开发实战(一)——认识J2SE
  2. VS Code 集成 flutter dart 开发
  3. oracle tns和sid,oracle – TNS-12505:TNS:侦听器当前不知道连接描述符中给出的SID
  4. gradle DSL method not found: android()
  5. 餐饮加盟推广遇到抖音下拉词框会碰撞出什么样的火花
  6. azure mysql无法连接_java - 无法从Azure的JAVA功能连接到Azure的MySQL数据库 - SO中文参考 - www.soinside.com...
  7. 如何开发 Web 应用程序
  8. go语言中如何使用select
  9. 香港TVB40年武侠情侣
  10. 北斗和GPS定位在室外非常好用,但当手机进入室内时,它们的定位功能就很不准,甚至无法定位。我们可以开启WLAN扫描定位WIFI模块固定编码或者开启手机的A-GPS辅助定位通过基站,A-GPS服务器定位
  11. 如何快递打造直播----概念篇(一)
  12. python mysql 并发_python3.6使用sqlalchemy读取mysql中的数据并进行多进程并发处理
  13. x系列服务器,X系列服务器.xls
  14. 基于JSP仓储物资管理系统
  15. ByteCTF2021安全范儿高校挑战赛线上Misc-《HearingNotBelieving》
  16. 致我们终将逝去的青春
  17. 写作中需要注意的事项
  18. python绘制国际象棋_用Python编写一个国际象棋AI程序
  19. golang all goroutines are asleep - deadlock
  20. 将汉字转为阿拉伯数字(oracle函数方式)

热门文章

  1. Oracle数据库----视图
  2. 鼠标移动或者鼠标点击div消失不见排查
  3. Discrete Logging POJ - 2417(BSGS)
  4. Jmeter响应中中文乱码怎么解决?
  5. ERROR ITMS-90022,90023,问题已解决
  6. JSP、Servlet中get请求和post请求的区别总结
  7. iOS 利用UIDocumentInteractionController打开和预览文档
  8. Hawq超过最大允许连接数
  9. vfp程序改错 计算机和英语,vfp程序改错教案.doc
  10. Linux版本配置环境变量,如何linux环境下配置环境变量过程图解