java实现最高响应比优先算法
时间: 2023-05-15 09:07:17 浏览: 123
最高响应比优先算法是一种常用的进程调度算法,它可以使得响应时间更短,提高系统的性能。在Java中,可以通过实现一个优先级队列来实现最高响应比优先算法。具体实现可以参考以下代码:
```
import java.util.*;
public class HRRN {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入进程数:");
int n = sc.nextInt();
int[] pid = new int[n];
int[] at = new int[n];
int[] bt = new int[n];
int[] ct = new int[n];
int[] tat = new int[n];
int[] wt = new int[n];
double[] rr = new double[n];
boolean[] vis = new boolean[n];
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (rr[o1] > rr[o2]) {
return -1;
} else if (rr[o1] < rr[o2]) {
return 1;
} else {
return 0;
}
}
});
for (int i = 0; i < n; i++) {
System.out.print("请输入第" + (i + 1) + "个进程的到达时间和服务时间:");
at[i] = sc.nextInt();
bt[i] = sc.nextInt();
pid[i] = i + 1;
vis[i] = false;
}
int time = 0;
int cnt = 0;
while (cnt < n) {
for (int i = 0; i < n; i++) {
if (at[i] <= time && !vis[i]) {
rr[i] = (time - at[i] + bt[i]) * 1.0 / bt[i];
pq.add(i);
}
}
if (pq.isEmpty()) {
time++;
continue;
}
int cur = pq.poll();
vis[cur] = true;
ct[cur] = time + bt[cur];
tat[cur] = ct[cur] - at[cur];
wt[cur] = tat[cur] - bt[cur];
cnt++;
time = ct[cur];
}
System.out.println("进程\t到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间");
for (int i = 0; i < n; i++) {
System.out.println(pid[i] + "\t" + at[i] + "\t\t" + bt[i] + "\t\t" + ct[i] + "\t\t" + tat[i] + "\t\t" + String.format("%.2f", (wt[i] * 1.0 / tat[i])));
}
}
}
```
这段代码实现了最高响应比优先算法,通过输入进程的到达时间和服务时间,计算出每个进程的完成时间、周转时间和带权周转时间,并输出结果。
阅读全文