进程调度算法

短作业优先(SJF, Shortest Job First)又称为“短进程优先”SPN(Shortest Process Next);是对FCFS算法的改进,其目标是减少平均周转时间。
短作业优先调度算法基于这样一种思想:
运行时间短的优先调度;
如果运行时间相同则调度最先发起请求的进程。
等待时间:一个进程从发起请求到开始执行的时间间隔。
现在有n个进程请求cpu,每个进程用一个二元组表示:(p,q),p代表该进程发起请求的时间,p代表需要占用cpu的时间。

请计算n个进程的平均等待时间。



import java.text.DecimalFormat;
import java.util.*;
public class Main {
 
    /**
     * @param args
     */
    static class task{
         
        int begin;
        int end;
    }
 
     
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Scanner in=new Scanner(System.in);
          
         while(in.hasNext()){
             int n=in.nextInt();
             List<task> list=new ArrayList<task>();
                 
             for(int i=0;i<n;i++){
                 
                 task t=new task();
                 t.begin=in.nextInt();
                 t.end=in.nextInt();
                 list.add(t);
                 
             }
             
                 Collections.sort(list, new Comparator<task>(){
 
                    @Override
                    public int compare(task o1, task o2) {
                        // TODO Auto-generated method stub
                        return o1.begin-o2.begin;
                    }               
                 });
         
                 
                 Collections.sort(list, new Comparator<task>(){
 
                    @Override
                     
                    public int compare(task o1, task o2) {
                        // TODO Auto-generated method stub
                        if(o1.begin==o2.begin) return o1.end-o2.end;
                        else return 0;
                    }               
                 });
             
             int t=list.get(0).begin;
             double s=0;
             for(int j=0;j<list.size();j++){
                 
                 
                 if(t>=list.get(j).begin)
                    s+=(t-list.get(j).begin);
         
                t+=list.get(j).end;
                 
             }
             //double a=0;
             DecimalFormat df = new DecimalFormat( "0.0000");
             System.out.println(df.format(s/n));
         }
    }
 
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值