开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
Java
/
Others
/
SJF.java
Java
/
Others
/
SJF.java
SJF.java 5.07 KB
一键复制 编辑 原始数据 按行查看 历史
github-actions 提交于 2020年10月24日 18:23 +08:00 . Formatted with Google Java Formatter
package Others;
/**
*
*
* <h2>Shortest job first.</h2>
*
* <p>Shortest job first (SJF) or shortest job next, is a scheduling policy that selects the waiting
* process with the smallest execution time to execute next Shortest Job first has the advantage of
* having minimum average waiting time among all scheduling algorithms. It is a Greedy Algorithm. It
* may cause starvation if shorter processes keep coming. This problem has been solved using the
* concept of aging.
*
* @author shivg7706
* @since 2018年10月27日
*/
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
class Process {
public int pid;
public int arrivalTime;
public int burstTime;
public int priority;
public int turnAroundTime;
public int waitTime;
public int remainingTime;
}
class Schedule {
private int noOfProcess;
private int timer = 0;
private ArrayList<Process> processes;
private ArrayList<Process> remainingProcess;
private ArrayList<Integer> gantChart;
private float burstAll;
private Map<Integer, ArrayList<Process>> arrivals;
Schedule() {
Scanner in = new Scanner(System.in);
processes = new ArrayList<Process>();
remainingProcess = new ArrayList<Process>();
gantChart = new ArrayList<>();
arrivals = new HashMap<>();
System.out.print("Enter the no. of processes: ");
noOfProcess = in.nextInt();
System.out.println("Enter the arrival, burst and priority of processes");
for (int i = 0; i < noOfProcess; i++) {
Process p = new Process();
p.pid = i;
p.arrivalTime = in.nextInt();
p.burstTime = in.nextInt();
p.priority = in.nextInt();
p.turnAroundTime = 0;
p.waitTime = 0;
p.remainingTime = p.burstTime;
if (arrivals.get(p.arrivalTime) == null) {
arrivals.put(p.arrivalTime, new ArrayList<Process>());
}
arrivals.get(p.arrivalTime).add(p);
processes.add(p);
burstAll += p.burstTime;
}
in.close();
}
void startScheduling() {
processes.sort(
new Comparator<Process>() {
@Override
public int compare(Process a, Process b) {
return a.arrivalTime - b.arrivalTime;
}
});
while (!(arrivals.size() == 0 && remainingProcess.size() == 0)) {
removeFinishedProcess();
if (arrivals.get(timer) != null) {
remainingProcess.addAll(arrivals.get(timer));
arrivals.remove(timer);
}
remainingProcess.sort(
new Comparator<Process>() {
private int alpha = 6;
private int beta = 1;
@Override
public int compare(Process a, Process b) {
int aRem = a.remainingTime;
int bRem = b.remainingTime;
int aprior = a.priority;
int bprior = b.priority;
return (alpha * aRem + beta * aprior) - (alpha * bRem + beta * bprior);
}
});
int k = timeElapsed(timer);
ageing(k);
timer++;
}
System.out.println("Total time required: " + (timer - 1));
}
void removeFinishedProcess() {
ArrayList<Integer> completed = new ArrayList<Integer>();
for (int i = 0; i < remainingProcess.size(); i++) {
if (remainingProcess.get(i).remainingTime == 0) {
completed.add(i);
}
}
for (int i = 0; i < completed.size(); i++) {
int pid = remainingProcess.get(completed.get(i)).pid;
processes.get(pid).waitTime = remainingProcess.get(completed.get(i)).waitTime;
remainingProcess.remove(remainingProcess.get(completed.get(i)));
}
}
public int timeElapsed(int i) {
if (!remainingProcess.isEmpty()) {
gantChart.add(i, remainingProcess.get(0).pid);
remainingProcess.get(0).remainingTime--;
return 1;
}
return 0;
}
public void ageing(int k) {
for (int i = k; i < remainingProcess.size(); i++) {
remainingProcess.get(i).waitTime++;
if (remainingProcess.get(i).waitTime % 7 == 0) {
remainingProcess.get(i).priority--;
}
}
}
public void solve() {
System.out.println("Gant chart ");
for (int i = 0; i < gantChart.size(); i++) {
System.out.print(gantChart.get(i) + " ");
}
System.out.println();
float waitTimeTot = 0;
float tatTime = 0;
for (int i = 0; i < noOfProcess; i++) {
processes.get(i).turnAroundTime = processes.get(i).waitTime + processes.get(i).burstTime;
waitTimeTot += processes.get(i).waitTime;
tatTime += processes.get(i).turnAroundTime;
System.out.println(
"Process no.: "
+ i
+ " Wait time: "
+ processes.get(i).waitTime
+ " Turn Around Time: "
+ processes.get(i).turnAroundTime);
}
System.out.println("Average Waiting Time: " + waitTimeTot / noOfProcess);
System.out.println("Average TAT Time: " + tatTime / noOfProcess);
System.out.println("Throughput: " + (float) noOfProcess / (timer - 1));
}
}
public class SJF {
public static void main(String[] args) {
Schedule s = new Schedule();
s.startScheduling();
s.solve();
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

All Algorithms implemented in Java
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/syysui/Java.git
git@gitee.com:syysui/Java.git
syysui
Java
Java
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /