最短作业优先(SJF)

本文介绍了一种基于最短作业优先(SJF)调度算法的实现方式,并通过具体示例展示了如何计算任务的平均等待时间。该算法适用于任务调度场景,能够有效减少任务等待时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求:

给定一个任务请求时间和任务持续时间的列表,计算使用最短作业优先时算法的平均等待时间。

测试样例:

输入:

[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;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值