您的位置:首页 > 其它

最短作业优先(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

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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: