码迷,mamicode.com
首页 > 编程语言 > 详细

进程调度算法

时间:2016-08-23 20:34:24      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

短作业优先(SJF, Shortest Job First)又称为“短进程优先”SPN(Shortest Process Next);是对FCFS算法的改进,其目标是减少平均周转时间。
短作业优先调度算法基于这样一种思想:
运行时间短的优先调度;
如果运行时间相同则调度最先发起请求的进程。
PS:本题题面描述有误,但原题如此,不宜修改,实际优先级如下:
1)接到任务的时间;
2) 如果接收时间相同则调度 运行时间最短的任务。
等待时间:一个进程从发起请求到开始执行的时间间隔。
现在有n个进程请求cpu,每个进程用一个二元组表示:(p,q),p代表该进程发起请求的时间,p代表需要占用cpu的时间。
请计算n个进程的平均等待时间。

代码如下:

  1 import java.text.DecimalFormat;
  2 import java.util.ArrayList;
  3 import java.util.Arrays;
  4 import java.util.Collections;
  5 import java.util.HashMap;
  6 import java.util.List;
  7 import java.util.Map;
  8 import java.util.Scanner;
  9 
 10 public class Main {
 11 
 12     public static void main(String[] args) {
 13         DecimalFormat de=new DecimalFormat("0.0000");
 14         Scanner scanner=new Scanner(System.in);
 15         while(scanner.hasNext())
 16         {
 17             int n=scanner.nextInt();
 18             int nn=n;
 19             int[] nums=new int[n];
 20             Map<Integer,List<Integer>> map=new HashMap<>();
 21             int i=0;
 22             while(nn>0)
 23             {
 24                 nums[i]=scanner.nextInt();
 25                 if(!map.containsKey(nums[i]))
 26                 {
 27                 List<Integer> list=new ArrayList<>();
 28                 list.add(scanner.nextInt());
 29                 map.put(nums[i], list);
 30                 }
 31                 else
 32                 {
 33                     List<Integer> list=map.get(nums[i]);
 34                     list.add(scanner.nextInt());
 35                 }
 36                 i++;
 37                 nn--;
 38             }
 39 
 40             Arrays.sort(nums);
 41             double sum=0;
 42             int temp=0;
 43             int start=0;
 44             int t=0;
 45             for(int k=0;k<n;)
 46             {
 47                 List<Integer> list=map.get(nums[k]);
 48                 
 49                 Collections.sort(list);
 50 
 51                 int count=list.size();
 52                 int p=0;
 53                 if(k==0)
 54                 {
 55                     start=nums[k];
 56                     sum=sum+start-nums[k];
 57 
 58                     p++;
 59                     if(count==1)
 60                         temp=list.get(0);
 61                     while(p<count)
 62                     {
 63                         temp=list.get(p-1);
 64                         start=start+temp;
 65                         
 66                         t=(start-nums[k]>0?(start-nums[k]):0);
 67                         sum=sum+t;
 68                         p++;
 69 
 70                         if(p==count)
 71                             temp=list.get(p-1);
 72 
 73                     }
 74                         p=0;
 75                 }
 76                 else{
 77                     while(p<count)
 78                     {
 79                         if(p==0)
 80                         start=start+temp;
 81                         else
 82                         {
 83                             temp=list.get(p-1);
 84                             start=start+temp;
 85                         }
 86                         t=(start-nums[k]>0?(start-nums[k]):0);
 87                         sum=sum+t;
 88                         p++;
 89                         if(p==count)
 90                             temp=list.get(p-1);
 91                     }
 92                         p=0;
 93                 }
 94                 
 95                 k=k+count;
 96             }
 97             System.out.println(de.format((double)(sum/(double)n)));
 98         }
 99     }
100 
101 }

 

进程调度算法

标签:

原文地址:http://www.cnblogs.com/ghuosaao/p/5800619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!