最短作业优先算法
2007-09-28 18:00
274 查看
public class Job {
private String name = "";
private String inTime = "";
private int maybeRunTime = 0;
private int waitTime = 0;
private int turnoverTime = 0;
private int withPoweroverTime = 0;
public int getTurnoverTime() {
return turnoverTime;
}
public void setTurnoverTime(int turnoverTime) {
this.turnoverTime = turnoverTime;
}
public int getWithPoweroverTime() {
return withPoweroverTime;
}
public void setWithPoweroverTime(int withPoweroverTime) {
this.withPoweroverTime = withPoweroverTime;
}
public String getInTime() {
return inTime;
}
public void setInTime(String inTime) {
this.inTime = inTime;
}
public int getMaybeRunTime() {
return maybeRunTime;
}
public void setMaybeRunTime(int maybeRunTime) {
this.maybeRunTime = maybeRunTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getWaitTime() {
return waitTime;
}
public void setWaitTime(int waitTime) {
this.waitTime = waitTime;
}
}
/////////////////////////////////////////////////////////////////////////////////////////
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;
import java.util.Vector;
public class Operating {
public static String dealTime(String time, int parMinutes) {
StringTokenizer tokenizer = new StringTokenizer(time,":");
String hour = tokenizer.nextToken();
String minute = tokenizer.nextToken();
int intHour = Integer.parseInt(hour);
int intMinute = Integer.parseInt(minute);
if((intMinute + parMinutes) < 60) {
intMinute = intMinute + parMinutes;
}else {
intHour = (int)(intMinute + parMinutes)/60 + intHour;
intMinute = (intMinute + parMinutes)%60;
}
if(intMinute < 10)
return intHour+":0"+intMinute;
else
return intHour+":"+intMinute;
}
public static boolean compareTime(String time1,String time2) {
StringTokenizer tokenizer1 = new StringTokenizer(time1,":");
String hour1 = tokenizer1.nextToken();
String minute1 = tokenizer1.nextToken();
int intHour1 = Integer.parseInt(hour1);
int intMinute1 = Integer.parseInt(minute1);
StringTokenizer tokenizer2 = new StringTokenizer(time2,":");
String hour2 = tokenizer2.nextToken();
String minute2 = tokenizer2.nextToken();
int intHour2 = Integer.parseInt(hour2);
int intMinute2 = Integer.parseInt(minute2);
if(intHour1 > intHour2) {
return true;
}else if (intHour1 == intHour2) {
if(intMinute1 > intMinute2) {
return true;
}
}
return false;
}
public static void main(String[] args) throws Exception {
int sumOverturn = 0;
float sumWithPower = 0;
int jobNum = 0;
BufferedReader fromFile = new BufferedReader(new FileReader("in.txt"));
Vector<Job> jobs = new Vector<Job>();
String jobInLine;
while((jobInLine = fromFile.readLine()) !=null) {
Job job = new Job();
StringTokenizer strTokenizer = new StringTokenizer(jobInLine);
job.setName(strTokenizer.nextToken());
job.setInTime(strTokenizer.nextToken());
job.setMaybeRunTime(Integer.parseInt(strTokenizer.nextToken()));
jobs.addElement(job);
}
System.out.println("作业名称 " + "/t进入 " + "/t开始" + "/t结束 " + "/t周转时间 " + "/t带权周转时间 ");
while(!jobs.isEmpty()) {
Job toDealJob = new Job();
int k = 0;
for (int i = 0,j = 0;i < jobs.size();) {
i = 0;
j = 0;
k = 0;
toDealJob = jobs.elementAt(i);
for (j = i + 1;j < jobs.size(); j++) {
String jInTime = jobs.elementAt(j).getInTime();
String nowTime = Operating.dealTime(toDealJob.getInTime(),toDealJob.getWaitTime());
if((jobs.elementAt(j).getMaybeRunTime() < toDealJob.getMaybeRunTime())
&& (Operating.compareTime(jInTime, nowTime))) {
toDealJob = jobs.elementAt(j);
k = j;
}
}
String startTime = Operating.dealTime(toDealJob.getInTime(), toDealJob.getWaitTime());
toDealJob = jobs.elementAt(k);
int overturn = toDealJob.getWaitTime() + toDealJob.getMaybeRunTime();
float withPower = overturn/toDealJob.getMaybeRunTime();
String endTime = Operating.dealTime(toDealJob.getInTime(), overturn);
System.out.println(toDealJob.getName() + "/t" //作业名称
+ toDealJob.getInTime()+ "/t" //进入
+ startTime + "/t" //开始
+ endTime + "/t"//结束
+ overturn + "/t"
+ withPower);
sumOverturn = sumOverturn + overturn;
sumWithPower = sumWithPower + withPower;
jobNum++;
for(int t = 0;t < jobs.size();t++) {
jobs.elementAt(t).setWaitTime(jobs.elementAt(t).getWaitTime() + toDealJob.getMaybeRunTime());
}
jobs.remove(k);
}
}
System.out.println();
float averageOverturn = sumOverturn/jobNum;
float averageWithPower = sumWithPower/jobNum;
System.out.println("平均周转时间为 :" + averageOverturn + " 分钟");
System.out.println("平均带权周转时间为 :" + averageWithPower + " 分钟");
}
}
/////////////////////////////////////////////////////////////////////////////////////////
in.txt的内容:
Job1 12:00 30
Job2 12:30 40
Job3 12:40 30
Job4 13:00 30
Job5 13:50 50
Job6 14:00 30
Job7 14:40 30
Job8 15:01 30
private String name = "";
private String inTime = "";
private int maybeRunTime = 0;
private int waitTime = 0;
private int turnoverTime = 0;
private int withPoweroverTime = 0;
public int getTurnoverTime() {
return turnoverTime;
}
public void setTurnoverTime(int turnoverTime) {
this.turnoverTime = turnoverTime;
}
public int getWithPoweroverTime() {
return withPoweroverTime;
}
public void setWithPoweroverTime(int withPoweroverTime) {
this.withPoweroverTime = withPoweroverTime;
}
public String getInTime() {
return inTime;
}
public void setInTime(String inTime) {
this.inTime = inTime;
}
public int getMaybeRunTime() {
return maybeRunTime;
}
public void setMaybeRunTime(int maybeRunTime) {
this.maybeRunTime = maybeRunTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getWaitTime() {
return waitTime;
}
public void setWaitTime(int waitTime) {
this.waitTime = waitTime;
}
}
/////////////////////////////////////////////////////////////////////////////////////////
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;
import java.util.Vector;
public class Operating {
public static String dealTime(String time, int parMinutes) {
StringTokenizer tokenizer = new StringTokenizer(time,":");
String hour = tokenizer.nextToken();
String minute = tokenizer.nextToken();
int intHour = Integer.parseInt(hour);
int intMinute = Integer.parseInt(minute);
if((intMinute + parMinutes) < 60) {
intMinute = intMinute + parMinutes;
}else {
intHour = (int)(intMinute + parMinutes)/60 + intHour;
intMinute = (intMinute + parMinutes)%60;
}
if(intMinute < 10)
return intHour+":0"+intMinute;
else
return intHour+":"+intMinute;
}
public static boolean compareTime(String time1,String time2) {
StringTokenizer tokenizer1 = new StringTokenizer(time1,":");
String hour1 = tokenizer1.nextToken();
String minute1 = tokenizer1.nextToken();
int intHour1 = Integer.parseInt(hour1);
int intMinute1 = Integer.parseInt(minute1);
StringTokenizer tokenizer2 = new StringTokenizer(time2,":");
String hour2 = tokenizer2.nextToken();
String minute2 = tokenizer2.nextToken();
int intHour2 = Integer.parseInt(hour2);
int intMinute2 = Integer.parseInt(minute2);
if(intHour1 > intHour2) {
return true;
}else if (intHour1 == intHour2) {
if(intMinute1 > intMinute2) {
return true;
}
}
return false;
}
public static void main(String[] args) throws Exception {
int sumOverturn = 0;
float sumWithPower = 0;
int jobNum = 0;
BufferedReader fromFile = new BufferedReader(new FileReader("in.txt"));
Vector<Job> jobs = new Vector<Job>();
String jobInLine;
while((jobInLine = fromFile.readLine()) !=null) {
Job job = new Job();
StringTokenizer strTokenizer = new StringTokenizer(jobInLine);
job.setName(strTokenizer.nextToken());
job.setInTime(strTokenizer.nextToken());
job.setMaybeRunTime(Integer.parseInt(strTokenizer.nextToken()));
jobs.addElement(job);
}
System.out.println("作业名称 " + "/t进入 " + "/t开始" + "/t结束 " + "/t周转时间 " + "/t带权周转时间 ");
while(!jobs.isEmpty()) {
Job toDealJob = new Job();
int k = 0;
for (int i = 0,j = 0;i < jobs.size();) {
i = 0;
j = 0;
k = 0;
toDealJob = jobs.elementAt(i);
for (j = i + 1;j < jobs.size(); j++) {
String jInTime = jobs.elementAt(j).getInTime();
String nowTime = Operating.dealTime(toDealJob.getInTime(),toDealJob.getWaitTime());
if((jobs.elementAt(j).getMaybeRunTime() < toDealJob.getMaybeRunTime())
&& (Operating.compareTime(jInTime, nowTime))) {
toDealJob = jobs.elementAt(j);
k = j;
}
}
String startTime = Operating.dealTime(toDealJob.getInTime(), toDealJob.getWaitTime());
toDealJob = jobs.elementAt(k);
int overturn = toDealJob.getWaitTime() + toDealJob.getMaybeRunTime();
float withPower = overturn/toDealJob.getMaybeRunTime();
String endTime = Operating.dealTime(toDealJob.getInTime(), overturn);
System.out.println(toDealJob.getName() + "/t" //作业名称
+ toDealJob.getInTime()+ "/t" //进入
+ startTime + "/t" //开始
+ endTime + "/t"//结束
+ overturn + "/t"
+ withPower);
sumOverturn = sumOverturn + overturn;
sumWithPower = sumWithPower + withPower;
jobNum++;
for(int t = 0;t < jobs.size();t++) {
jobs.elementAt(t).setWaitTime(jobs.elementAt(t).getWaitTime() + toDealJob.getMaybeRunTime());
}
jobs.remove(k);
}
}
System.out.println();
float averageOverturn = sumOverturn/jobNum;
float averageWithPower = sumWithPower/jobNum;
System.out.println("平均周转时间为 :" + averageOverturn + " 分钟");
System.out.println("平均带权周转时间为 :" + averageWithPower + " 分钟");
}
}
/////////////////////////////////////////////////////////////////////////////////////////
in.txt的内容:
Job1 12:00 30
Job2 12:30 40
Job3 12:40 30
Job4 13:00 30
Job5 13:50 50
Job6 14:00 30
Job7 14:40 30
Job8 15:01 30
相关文章推荐
- 最短作业优先算法SJF,求平均等待时间
- 证明SJF(Shortest Job First:最短作业优先算法)策略生成的调度方案理论最优
- [置顶] Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法
- 假设系统按单值方式运行且采用最短作业优先算法,有J1,J2,J3,J4共4个作业同时到达,则以下哪几种情况下的平均周转时间为10分钟?
- 作业调度算法之短作业优先调度算法和先来先服务调度算法
- 用java语言模拟短作业优先算法
- 最短寻道优先算法----SSTF算法
- [2017/05/18]操作系统调度算法--最短剩余时间优先算法的模拟实现
- 短作业优先算法的缺点
- 计算机操作系统调度算法——短作业优先算法简单实现
- java短作业优先算法
- 【ZX笔试】短作业优先算法
- 短作业优先(SJF)算法
- SJF(最短作业优先)
- 最短作业优先调度算法(SJF算法)的C++实现
- 进程调度算法:短作业优先,时间片,优先级
- 短作业优先算法c++版
- 先来先服务,短作业优先,最高响应比三种算法下求平均周转和带权周转时间的实现
- 短作业优先算法-SJF
- 最短寻道优先算法----SSTF算法