高响应比优先算法,我们为每一个作业引入一个动态优先级,定义如下:
- 优先权=(等待时间+要求服务时间)/要求服务时间
而等待时间与服务时间之和是系统对该作业的响应时间,所以优先级又相当于响应比Rp,所以
- Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
#include<bits/stdc++.h>
using namespace std;
#define maxsize 10
struct proc
{
double seq;
double com_Time;
double ser_Time;
double wait_Time;
double res_Rate;
}p[maxsize + 5];
bool cmp(proc x, proc y) {
return x.res_Rate > y.res_Rate;
}
void sortBy_res_Rate(double time, int flag, int n) {
for (; flag <n; flag++) {
p[flag].wait_Time = time - p[flag].com_Time;
p[flag].res_Rate =(p[flag].wait_Time + p[flag].ser_Time) / p[flag].ser_Time;
}
}
int main() {
int n;
cout << "请输入进程个数:(max<=10)" << endl;
cin >> n;
for (int i = 0; i < n; ++i) {
cout << "请按顺序输入第"<<i+1<<"个进程的作业号,到达时刻,服务时间:" << endl;
scanf("%lf %lf %lf",&p[i].seq,&p[i].com_Time,&p[i].ser_Time);
}
p[0].res_Rate = INT_MAX;
double time = p[0].com_Time;
time += p[0].ser_Time;
cout << "调度顺序:" << endl;
cout<<p[0].seq<<" ";
for (int flag = 1; flag < n; ++flag) {
sortBy_res_Rate(time, flag, n);
sort(p + flag, p + n, cmp);
time+=p[flag].ser_Time;
cout << p[flag].seq << " ";
}
cout << endl;
return 0;
}
版权声明:本文为qq_43477024原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。