Java实现最短作业优化算法 (SJF算法)
2017-05-16 20:30
309 查看
题目描述:
最短作业优先(SJF)是一种调度任务请求的策略。每个任务请求都含有请求时间(即向系统提交请求的时间)和持续时间(即完成任务所需时间)属性。当前任务完成后,SJF策略选择含有最短持续时间的任务执行。如果有多个任务具有相同持续时间,那么选择含有最早请求时间的任务。任务的等待时间为请求时间和实际开始时间的差值(即它等待系统执行所花费的时间)。可以假设,作业到达时,系统一直执行任务,从未空闲。
给定任务的请求时间和持续时间表,设计一个程序,使用短作业优先(SJF)算法计算平均等待时间。
输入:
任务请求时间整数列表 requestTimes
任务持续时间整数列表 durations
输出
返回使用SJF调度计算出的平均等待时间浮点数
测试用例:
input:[0,2,4,5] [7,4,1,4]
output:4.0
input:[0,1,3,9][2,1,7,5]
output:0.5
分析测试用例1:
首先0时刻开始,所以第一个执行的是7.此时time=0-0=0;
然后7时刻,所有的时间都已经到达,这个时候,选择持续时间最短的,执行1,此时time=7-4=3;
然后8时刻,选择最短的持续时间,这里有两个4,选择两个4里面请求时间最早的4,所以应该执行第一个4,这个时候,time=8-2=6;
然后12时刻,选择最后一个4,time=12-5=7;
所以平均等待时间应该是 (0+3+6+7)/4=4.0
分析测试用例2:
input:[0,1,3,9][2,1,7,5]
output:0.5
0时刻,执行2.time=0-0=0;
2时刻,只有1到达了,所以执行1,time=2-1=1;
3时刻,只有7到达了,所以执行7,time=3-3=0;
10时刻,最后一个到达,所以执行5,time=10-9=1;
所以平均等待时间应该是: (0+1+0+1)/4=0.5
所以按照这个想法写代码吧,注意判断边界条件,首先是request和duration的数组是大于等于0,小于等于100的。其次是执行的时间和请求时间都必须是正数,否则直接返回error,最后需要注意返回的是浮点数。
最短作业优先(SJF)是一种调度任务请求的策略。每个任务请求都含有请求时间(即向系统提交请求的时间)和持续时间(即完成任务所需时间)属性。当前任务完成后,SJF策略选择含有最短持续时间的任务执行。如果有多个任务具有相同持续时间,那么选择含有最早请求时间的任务。任务的等待时间为请求时间和实际开始时间的差值(即它等待系统执行所花费的时间)。可以假设,作业到达时,系统一直执行任务,从未空闲。
给定任务的请求时间和持续时间表,设计一个程序,使用短作业优先(SJF)算法计算平均等待时间。
输入:
任务请求时间整数列表 requestTimes
任务持续时间整数列表 durations
输出
返回使用SJF调度计算出的平均等待时间浮点数
测试用例:
input:[0,2,4,5] [7,4,1,4]
output:4.0
input:[0,1,3,9][2,1,7,5]
output:0.5
分析测试用例1:
首先0时刻开始,所以第一个执行的是7.此时time=0-0=0;
然后7时刻,所有的时间都已经到达,这个时候,选择持续时间最短的,执行1,此时time=7-4=3;
然后8时刻,选择最短的持续时间,这里有两个4,选择两个4里面请求时间最早的4,所以应该执行第一个4,这个时候,time=8-2=6;
然后12时刻,选择最后一个4,time=12-5=7;
所以平均等待时间应该是 (0+3+6+7)/4=4.0
分析测试用例2:
input:[0,1,3,9][2,1,7,5]
output:0.5
0时刻,执行2.time=0-0=0;
2时刻,只有1到达了,所以执行1,time=2-1=1;
3时刻,只有7到达了,所以执行7,time=3-3=0;
10时刻,最后一个到达,所以执行5,time=10-9=1;
所以平均等待时间应该是: (0+1+0+1)/4=0.5
所以按照这个想法写代码吧,注意判断边界条件,首先是request和duration的数组是大于等于0,小于等于100的。其次是执行的时间和请求时间都必须是正数,否则直接返回error,最后需要注意返回的是浮点数。
/** /** * @author LilyLee * @date 2017年5月16日 * @time 下午4:34:02 * @Version 1.0 * @email lilylee_1213@foxmail.com * */ public class zhongxinSJF { public static void main(String[] args) { //int [] requesttime={0,2,4,5}; //int []durations={7,4,1,4}; int [] requesttime={0,1,3,9}; int []durations={2,1,7,5}; System.out.println(waitTime(requesttime,durations)); } public static float waitTime(int[] requesttime,int[] durations){ float fin=0.0f; float wtime=0.0f; int temptime=0; int nowtime=0; int []flag=new int[requesttime.length]; int cy=durations.length-1; boolean b=true; //第一个真的要特殊处理,不然后面的判断真的好烦啊。 nowtime=durations[0]; durations[0]=1234567; requesttime[0]=1324567; while(b){ for(int i=1;i<durations.length;i++){ if(requesttime[i]>=0&&requesttime[i]<=nowtime){ flag[i]=1; } } int re=findminD(flag,durations,requesttime); // System.out.println(durations[re]+ " "+requesttime[re]); wtime=nowtime-requesttime[re]; nowtime+=durations[re]; fin+=wtime; //System.out.println("wtime="+wtime+"nowtime="+nowtime); //开始没有处理使用过这个问题,因此结果不对,一直在最小的那个数上循环 requesttime[re]=durations[0]; durations[re]=durations[0]; cy--; if(cy==0){ b=false; } } return (fin/requesttime.length); } public static int findminD(int[] flag,int []durations,int[] requesttime){ int min=durations[0]; int minid=0; /* for(int k=0;k<durations.length;k++){ if(durations[k]==-1){ durations[k]=1000; requesttime[k]=1000; flag[k]=0; } } */ for(int i=0;i<durations.length;i++){ if(flag[i]!=0){ if(durations[i]<min){ min=durations[i]; minid=i; }else if(durations[i]==min){ if(requesttime[i]<minid){ min=durations[i]; minid=i; } } } } return minid; } }
相关文章推荐
- java_实现先来先服务(FCFS)短作业优先算法(SJF)
- 算法——数据结构图的最短路径实现JAVA代码
- 最短路径算法之Dijkstra算法_Java实现
- 求图中最短路径算法之Dijkstra算法——C++实现并优化
- 无向图的最短路径算法JAVA实现(转)
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 最短路径算法之Dijkstra算法(java实现)
- java实现图的最短路径(SP)的迪杰斯特拉(Dijkstra)算法
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
- 基于java最短路径算法公交查询系统的设计与实现
- 最短编译距离(Minimum Edit Distance)算法及java实现
- 最短路径算法比较(Dijkstra、Bellman-Ford、SPFA)及实现(Java)
- 算法java实现--贪心算法--单源最短路径问题--Dijkstra算法
- java实现图的最短路径(SP)的贝尔曼福特(Bellman-Ford)算法
- A*Star 最短路径算法的Java实现
- KMP模式匹配算法原理分析、next数组优化及java实现
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路)Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 最短路径A*算法原理及java代码实现(看不懂是我的失败)
- 图论最短路径算法-Floyd算法-JAVA代码实现
- 无向图的最短路径算法JAVA实现