带时限的作业排序

本文介绍了一种使用贪心算法解决作业排序问题的方法。问题要求在单机系统上,根据作业的截止时间和收益,找到一种作业调度策略,使得所有作业都能在截止时间内完成并获得最大收益。文中提供了两种解决方案,一种是一般方法,另一种是改进方法,通过调整作业执行时间来优化收益。
摘要由CSDN通过智能技术生成
/*用贪心法求解作业排序问题。设有一个单机系统、无其他资源限制并且每个作业运行时间相等
,不妨设每个作业运行1个单位时间。现有n个作业,每个作业都有一个截止时间di>0。如果作业
能够在截止时间内完成,即可获得pi>0的收益。问题要求得到一种作业调度的方案,该方案给出
作业的一个子集和该作业子集的一种排列,使得按照这种排列次序调度作业运行,该子集中的每个
作业都能够如期完成,并且能够获得最大收益。也就是说,这种作业调度是最优的。*/
//一种一般方法:
/*具体做法是:将作业i按时限的非递减次序插入向量(x[0],x[1]...x[k])中得某个位置,舍得插入
作业i后,由k+1个分量组成的部分解向量仍按照时限的非递减次序排列。不妨设作业i被插入
于下标r+1处。为了在位置r+1处添加作业i,作业想x[r+1],...,x[k]在向量中的位置都必须依次
后移一位,形成一个新的部分解向量。为了保证在添加作业i后的作业子集仍然构成可行解,必须
满足下列两个条件:
1:d[x[i]]>i+1,r+1<=j<=k,否则作业x[r+1],...,x[k]的后移将导致其中某些作业超期;
2:d[j]>r+1,否则作业j自己无法在时刻r+2前完成。*/
int JS(int *d,int *x,int n)//d代表着截止时间,x代表所选作业的执行顺序,
                          //n代表作业的总数(并只不是选中的)
{//该作业已经按收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值