OPT算法,FIFO算法,LRU算法,LFU算法的java程序
2016-12-20 20:13
756 查看
import java.util.Scanner; public class systemLab3 { final static int NUM=20; final static int FRAME = 3; public static int []pages = new int[NUM]; public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("依次输入数组:"); for(int i=0;i<NUM;i++) { pages[i] = s.nextInt(); } System.out.println("opt:"); opt(pages); System.out.println("fifo:"); fifo(pages); System.out.println("lru:"); lru(pages); System.out.println("lfu:"); lfu(pages); } public static void opt(int []pages) { int []frames = new int[FRAME]; for(int i=0;i<FRAME;i++) //0-frame装入并输出 { frames[i] = pages[i]; System.out.print("当前页面:"); for(int j=0;j<=i;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } for(int i=FRAME;i<pages.length;i++) //后续数组内容opt置换 { boolean isIncluded = false; //判断页匡内是否含有下一个内容 int posToSwitch; //置换位置的下标 for(int j=0;j<FRAME;j++) { if(frames[j] == pages[i]) isIncluded = true; } if(!isIncluded) { int []nextIndexOfFrames = new int[FRAME]; for(int j=0;j<FRAME;j++) 4000 nextIndexOfFrames[j] = getIndexOfNum(i,frames[j]); posToSwitch = getMaxOfArray(nextIndexOfFrames); frames[posToSwitch] = pages[i]; } System.out.print("当前页面:"); for(int j=0;j<FRAME;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } } private static int getMaxOfArray(int[] frames) { int i,index=0,max; for(i=0,max = frames[0];i<FRAME;i++) if(frames[i]>max) { index = i; max = frames[i]; } return index; } private static int getMinOfArray(int[] frames) { int i,index=0,min; for(i=0,min = frames[0];i<FRAME;i++) if(frames[i]<min) { index = i; min = frames[i]; } return index; } private static int getIndexOfNum(int i,int toFind) { int num=100; for(;i<pages.length;i++) if(pages[i] == toFind) return i; //找到 return num; //未找到 } public static void fifo(int []pages) { int []frames = new int[FRAME]; int []timeOfInsert = new int[FRAME]; for(int i=0;i<FRAME;i++) //0-frame装入并输出 { frames[i] = pages[i]; timeOfInsert[i] = i; //记录插入时间 System.out.print("当前页面:"); for(int j=0;j<=i;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } for(int i=FRAME;i<pages.length;i++) //后续数组内容FIFO置换 { boolean isIncluded = false; //判断页匡内是否含有下一个内容 int posToSwitch; //置换位置的下标 for(int j=0;j<FRAME;j++) { if(frames[j] == pages[i]) isIncluded = true; } if(!isIncluded) //当前页面不包含所需内容 { posToSwitch = getMinOfArray(timeOfInsert); frames[posToSwitch] = pages[i]; timeOfInsert[posToSwitch] = i; //记录修改时间 } System.out.print("当前页面:"); for(int j=0;j<FRAME;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } } public static void lru(int []pages) { int []frames = new int[FRAME]; int []timeOfUse = new int[FRAME]; for(int i=0;i<FRAME;i++) //0-frame装入并输出 { frames[i] = pages[i]; timeOfUse[i] = i; //记录最近一次使用的时间 System.out.print("当前页面:"); for(int j=0;j<=i;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } for(int i=FRAME;i<pages.length;i++) //后续数组内容LRU置换 { boolean isIncluded = false; //判断页匡内是否含有下一个内容 int posToSwitch; //置换位置的下标 for(int j=0;j<FRAME;j++) { if(frames[j] == pages[i]) { isIncluded = true; timeOfUse[j] = i; } } if(!isIncluded) //当前页面不包含所需内容 { posToSwitch = getMinOfArray(timeOfUse); frames[posToSwitch] = pages[i]; timeOfUse[posToSwitch] = i; //记录修改时间 } System.out.print("当前页面:"); for(int j=0;j<FRAME;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } } public static void lfu(int []pages) { int numberOfNumbers=0; //不同数字的个数 int []num = new int[10]; int k=0; boolean included = false; for(int i=0;i<pages.length;i++) for(int j=0;j<i;j++) { if(pages[j]==pages[i]) included = true; else if(pages[j]!=pages[i]&&!included) { numberOfNumbers++; num[k++]=pages[j]; } } NumAndTimes[] numAndTimes = new NumAndTimes[numberOfNumbers]; int []frames = new int[FRAME]; for(int i=0;i<FRAME;i++) //0-frame装入并输出 { frames[i] = pages[i]; System.out.print("当前页面:"); for(int j=0;j<=i;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } for(int i=FRAME;i<pages.length;i++) //后续数组内容LFU置换 { boolean isIncluded = false; //判断页匡内是否含有下一个内容 int posToSwitch; //置换位置的下标 for(int j=0;j<FRAME;j++) { if(frames[j] == pages[i]) { isIncluded = true; timesOfUse[j] = i; } } if(!isIncluded) //当前页面不包含所需内容 { } System.out.print("当前页面:"); for(int j=0;j<FRAME;j++) { System.out.print(frames[j]+" "); } System.out.print("\n"); } } public class NumAndTimes { public int num; public int times=0; } }
相关文章推荐
- FIFO 、LRU、LFU三种算法
- FIFO 、LRU、LFU三种算法
- FIFO与LRU 算法实现(java)
- 缓存算法(内存回收算法)- LRU、FIFO、LFU
- 关于FIFO 、LRU、LFU三种算法
- LRU、LFU、FIFO算法总结
- 缓存失效策略(FIFO 、LRU、LFU三种算法的区别)
- 缓存算法(内存回收算法)- LRU、FIFO、LFU
- java动态缓存成长小纪(二)——缓存算法的实现:LRU、LFU、FIFO
- FIFO 、LRU、LFU三种算法
- 数据缓存失效算法FIFO、LRU、LFU深入理解
- java实现页面替换算法(LRU、LFU、FIFO)
- 缓存回收算法 FIFO 、LRU、LFU三种算法
- 使用 Java.util.LinkedHashMap 实现 LRU、FIFO 算法
- FIFO 、LRU、LFU三种算法
- 缓存失效策略(FIFO 、LRU、LFU三种算法的区别)
- 常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)
- 简单的java缓存实现(LRU,LFU,FIFO)
- 【算法】java版红黑树算法的完整实现及swing界面演示程序
- Java经典算法四十例编程详解+程序实例