最近最少使用(LRU)算法模拟--LeastRecentPage
来源:互联网 发布:怎么用js判断两个日期 编辑:程序博客网 时间:2024/05/17 03:55
题目
最近最少使用(LRU)缓存算法从缓存中收回最近最少使用元素(当缓存满时)。当缓存请求元素后,应将元素添加到缓存(如果之前不再缓存中),并将其作为缓存中最近使用最多的元素。
给高速缓存的最大容量和一个整数(向缓存发出请求),请使用LRU高速缓存算法计算高速缓存请求失败的次数。当请求的整数不在高速缓存中时,说明高速缓存请求失败。初始状态下告诉缓存是空的。
编写程序模拟LRU的运行过程,
依次输入分配给某进程的缓存大小(页帧数)和该进程访问页面的次序,用-1作为输入结束标志,
初始时缓存为空,要求输出使用LRU算法的缺页次数
测试用例
TestCase 1:Input:
4
4 3 2 1 4 3 5 4 3 2 1 5 4 -1
Expected Return Value:
9
TestCase 2:
Input:
3
1 2 3 3 2 1 4 3 2 1 -1
Expected Return Value:
7
TestCase 3:
3
Input:
3 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 -1
Expected Return Value:
11
TestCase 4:
2
Input:
2 3 1 3 2 1 4 3 2-1
Expected Return Value:
8
代码
import java.util.Scanner;public class LeastRecentPage {public static final int MAX_TASK_NUM = 100;public static void main(String[] args) {// TODO Auto-generated method stubScanner scan = new Scanner(System.in);while (scan.hasNext()) {int cacheBlocks = scan.nextInt();int[] taskPages = new int[MAX_TASK_NUM];int i = 0;int page = scan.nextInt();while (page != -1) // 输入结束标志{taskPages[i++] = page;page = scan.nextInt();}System.out.println(LRU.calMissingPages(cacheBlocks, i, taskPages));}scan.close();}}class LRU {public static int calMissingPages(int cacheBlocks, int taskNum, int taskPages[]) {int[] cache = new int[cacheBlocks]; // 缓存cache[0] = taskPages[0]; // 预处理,先将第一个作业页面放入缓存int cachePages = 1; // 已缓存的页面数int missingNum = 1; // 缺页次数boolean missingFlag;// 缺页标志for (int i = 1; i < taskNum; i++) {missingFlag = true;for (int j = 0; j < cachePages; j++) {if (cache[j] == taskPages[i]) // 命中{missingFlag = false;int t = cache[j];// 插入排序将当前命中的元素移到队尾for (int k = j + 1; k < cachePages; k++)cache[k - 1] = cache[k];cache[cachePages - 1] = t;break;}}if (missingFlag)// 未命中{missingNum++;if (cachePages == cacheBlocks) // 缓存已满{for (int k = 1; k < cachePages; k++)cache[k - 1] = cache[k];cache[cachePages - 1] = taskPages[i];} else // 缓存未满{cache[cachePages] = taskPages[i];cachePages++;}}}return missingNum;}
1 0
- 最近最少使用(LRU)算法模拟--LeastRecentPage
- C++模拟操作系统最近最少使用算法(LRU),acm
- LRU算法,最近最少使用算法
- LRU算法,最近最少使用算法
- 自适应Lru(最近最少使用)算法
- 最近最少使用缓存算法LRU
- LRU(最近最少使用页面置换算法)淘汰算法
- LRU(最近最少使用页面置换算法)淘汰算法
- [Leetcode-146] LRU Cache 最近最少使用页面置换算法
- 操作系统实验之最近最久未使用算法(LRU)模拟
- 缓存淘汰算法--LRU算法【最近最少使用算法LRU置换策略适用于热点数据比较多的场景】
- 操作系统页面置换算法之最近最少使用算法(LRU)
- leetcode LRU Cache(高级缓存的最近最少使用算法实现)
- LRU(Least Recently Used)最近最少使用页面置换算法
- 【python学习笔记】3:LRU(最近最少使用页面置换)算法
- LRU最近最久未使用算法
- LRU最近最久未使用算法
- 最近最少使用队列算法
- Native for Mysql 连接阿里云数据库(内网连接和外网连接。)
- 三消
- 华为OJ 初级:字符个数统计
- QString, QByteArray, 和 QVariant用法详解
- spring集成httpclient连接池配置
- 最近最少使用(LRU)算法模拟--LeastRecentPage
- #DP基础题#嵌套矩形(输出路径)
- java快速排序Quick sort
- 解决ajax返回的问题。
- Vagrant命令(四)
- 2.安卓源码下载
- 剑指offer----重建二叉树---java实现
- mark php安全问题
- 用java代码调用名片识别接口示例代码