算法导论-15-7 达到最高效益的调度
2011-07-27 10:45
302 查看
【转】
问题:
假设有一台机器,以及在此机器上处理的n个作业a1,a2,...an的集合。每隔作业aj有一个处理时间tj,效益pj,以及最后期限dj。机器在一个
时刻只能处理一个作业,而且作业aj必须在tj连续时间单位内不间断地运行。如果作业aj在最后期限dj之前完成,则获得效益pj,但如果在最后期限之后
才完成,则没有效益。请给出一个动态规划算法,来寻找能获得最大量效益的调度,假设所有的处理时间都是1到n之间的整数。
——————————
分析:
其实这个问题类似于01背包问题。
1. 将a1,a2,…,an按照dj值排序,从小到大。假设接下来的分析中,已经保证当i<j时,di<dj。添加d0=0。
2. 构建数组s
[d
],s[i][j]代表在j时间内,调度i个作业,所得最高效益值。初始时,令s[i][0] = 0(i = 0->n),s[0][j] = 0(j = 0->d
)。
3. 求s[i][j]的值,select[i][j]用于记录是否选择i。这里递归包含了一种思想:如果第i个作业被调度,那么最好使其在期限时正好结束,这样能够保证i之前的作业能够在更充裕的时间内被调度。
4. 最终s
[d
]即为所求最高效益值。如果要求出所调度的作业序列,可以通过select取得。
注意d[i-1][j] 中j最多到达d[i-1], 所以要min(j-t[i], d[i-1])!!
问题:
假设有一台机器,以及在此机器上处理的n个作业a1,a2,...an的集合。每隔作业aj有一个处理时间tj,效益pj,以及最后期限dj。机器在一个
时刻只能处理一个作业,而且作业aj必须在tj连续时间单位内不间断地运行。如果作业aj在最后期限dj之前完成,则获得效益pj,但如果在最后期限之后
才完成,则没有效益。请给出一个动态规划算法,来寻找能获得最大量效益的调度,假设所有的处理时间都是1到n之间的整数。
——————————
分析:
其实这个问题类似于01背包问题。
1. 将a1,a2,…,an按照dj值排序,从小到大。假设接下来的分析中,已经保证当i<j时,di<dj。添加d0=0。
2. 构建数组s
[d
],s[i][j]代表在j时间内,调度i个作业,所得最高效益值。初始时,令s[i][0] = 0(i = 0->n),s[0][j] = 0(j = 0->d
)。
3. 求s[i][j]的值,select[i][j]用于记录是否选择i。这里递归包含了一种思想:如果第i个作业被调度,那么最好使其在期限时正好结束,这样能够保证i之前的作业能够在更充裕的时间内被调度。
for i = 1->n for j = 1->d[i] //不调度i s[i][j] = s[i-1][min(j, d[i-1])] select[i][j] = false //调度i if j>t[i] if s[i][j] < s[i-1][min(j-t[i], d[i-1])]+p[i] s[i][j] = s[i-1][min(j-t[i], d[i-1])]+p[i] select[i][j] = true
4. 最终s
[d
]即为所求最高效益值。如果要求出所调度的作业序列,可以通过select取得。
注意d[i-1][j] 中j最多到达d[i-1], 所以要min(j-t[i], d[i-1])!!
相关文章推荐
- 算法导论-15-7-达到最高效益的调度
- 算法导论---达到最大效益的调度
- 算法导论-15-7-达到最高效益的调度
- 达到最高效益的调度
- 算法导论15 dp 最高效益调度
- 达到最高效益的调度
- 动态规划--达到最高效益的调度
- 【算法导论】动态规划算法之装配线调度
- 一个任务调度问题-----算法导论
- uC/OS-II任务调度之就绪表及最高优先级任务判定算法
- 算法导论学习笔记(15)——用于不相交集合的数据结构
- 红黑树——算法导论(15)
- 算法导论 用拟阵求解任务调度问题
- POJ 2677 (算法导论15-3)双调欧几里得旅行商问题 dp
- 【算法导论】动态规划--装配线调度问题
- 算法导论第三版15-4整齐打印Printing neatly
- 动态规划解决——装配线调度(算法导论第15章)
- POJ 3356 AGTC(算法导论15-5编辑距离) 经典dp
- [置顶] Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法
- 装配线调度(算法导论)