高响应比优先算法HRRN(c++)

高响应比优先算法,我们为每一个作业引入一个动态优先级,定义如下:

  • 优先权=(等待时间+要求服务时间)/要求服务时间

而等待时间与服务时间之和是系统对该作业的响应时间,所以优先级又相当于响应比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版权协议,转载请附上原文出处链接和本声明。