3 带有期限的作业排序问题

文章介绍了FJS算法,这是一种用于解决带有期限的作业排序问题的优化方法。算法基于集合树思想,通过时间片分配和Find、Union操作来寻找能在截止期限前完成并最大化效益的作业子集。输入包括作业数、期限和效益值,输出为最大效益值和作业顺序。代码示例展示了算法的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

带有期限的作业排序要解决的是操作系统中单机、无资源约束且每个作业可在等量时间内完成的作业调度问题,形式化描述为:
①只能在一台机器上处理n个作业,每个作业i=1,...,n均可在单位时间内完成;
②每个作业i都有一个期限值di​>0,(di​是整数);
③当且仅当作业i在它的截止期限前被完成时获得pi​>0的效益;
问题的可行解是这n个作业的一个子集合J。J中的每个作业都能在各自的截止期限之前完成,产生一个作业效益之和∑pi​。具有最大效益值的可行解就是最优解。

要求用更快的作业排序算法(利用集合树方法)实现。

输入格式:

第一行为一个不超过200的正整数n,表示作业的个数;

接下来的n行,每行两个正整数(中间用空格隔开),表示每个作业i的截止期限di​和按期完成产生的效益pi​。

输出格式:

第一行给出最优解的效益值。

第二行按照时间片分配顺序输出最优解J中的作业,中间用空格隔开,最后一个作业后面不要加空格。

输入样例1:

4
1 20
2 15
2 100
1 10

输出样例1:

120
1 3

输入样例2:

6
2 25
3 20
3 15
2 10
4 1
4 5 

输出样例2:

65
3 1 2 6

本题考查FJS算法(一种更快的作业排序算法)


 

首先先了解一些预备内容:

1.时间片:若还没给作业i分配处理时间,则分配给它时间片[a-1,a],其中a应该尽量取最大,且时间片应该为空;为简便起见,用i表示该时间片。

2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值