进程调度算法

来源:互联网 发布:c语言中define的用法 编辑:程序博客网 时间:2024/06/01 07:11
短作业优先(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 0