最短作业优先(SJF)
2016-04-22 10:31
447 查看
题目要求:
给定一个任务请求时间和任务持续时间的列表,计算使用最短作业优先时算法的平均等待时间。
测试样例:
输入:
[0, 2, 4, 5], [7, 4, 1, 4]
输出:
4.0
输入:
[0, 1, 3, 9], [2, 1, 7, 5]
输出:
0.5
给定一个任务请求时间和任务持续时间的列表,计算使用最短作业优先时算法的平均等待时间。
测试样例:
输入:
[0, 2, 4, 5], [7, 4, 1, 4]
输出:
4.0
输入:
[0, 1, 3, 9], [2, 1, 7, 5]
输出:
0.5
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class BD { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<CNode> list = new ArrayList<CNode>(); list.add(new CNode(0, 2)); list.add(new CNode(1, 1)); list.add(new CNode(3, 7)); list.add(new CNode(9, 5)); int len = list.size(); int curTime = 0; double wtime = 0; Collections.sort(list, new MyComparator()); while(list.size() > 0){ ArrayList<CNode> ready = new ArrayList<CNode>(); for(CNode w : list){ if(w.rt <= curTime){ ready.add(w); } } if(ready.size()==0){ //任务队列中最早的请求时间大于当前时间 wtime += list.get(0).rt - curTime; curTime = list.get(0).rt; continue; } CNode fe = ready.get(0); wtime += (curTime - fe.rt); curTime += fe.dt; list.remove(fe); } System.out.println(wtime/len); } } class CNode{ int rt; int dt; CNode(int a, int b){ this.rt = a; this.dt = b; } } class MyComparator implements Comparator<CNode>{ @Override public int compare(CNode a, CNode b){ if(a.dt > b.dt){ return 1; }else if(a.dt==b.dt){ if(a.rt >= b.rt){ return 1; }else{ return -1; } }else{ return -1; } } }
相关文章推荐
- Android多线程编程
- robotframework笔记21
- myeclipse的作用
- RT-Thread LwIP的使用
- 防止frame框架中出现login页面
- C++第四次作业
- Java StringBuffer
- 无法启动此程序,因为计算机中丢失MSVCP100D.dll。尝试重新安装该程序以解决此问题。
- 动效设计原理:从卡通动画到UI动效
- 详解 Objective-C 中的 Runtime
- 测试20160422
- start.S解析4
- C++第一次实验1-1
- 解析ANDROID ps命令执行后各项参数的含义
- postfix和dovecot架设邮件服务器的一些记录1
- 213. House Robber II
- [后缀数组 set] BZOJ 4516 [Sdoi2016]生成魔咒
- 方法(面向对象篇)
- 如何理解UX 设计中的功能动效
- Storm记录级容错的基本原理(acker工作原理)