带惩罚的任务调度问题:
单处理器上带截止时间和惩罚的单位时间任务调度问题有以下输入:
1、n个单位时间任务的集合S={a1,a2,……,an};
2、n个整数截止时间d1,d2,……,dn,每个di满足1<=di<=n,我们期望任务ai在时间di之前完成。
3、n个非负权重或者惩罚w1,w2,……,wn,若任务ai在时间di之前没有完成,我们就会受到wi这么多的惩罚,如果任务在截止时间之前完成,则不会受到惩罚。
(单位时间任务是严格需要一个时间单位来完成的作业)
在算法中我们定义延迟:如果方案中一个任务在截止时间后完成。都则就是提前。
提前优先形式:将提前的任务都置于延迟任务之前。
调度方案有规范形式:提前任务都在延迟任务之前,且提前任务按截止时间单调递增的顺序排列。
代码实现如下:
package cc.wsyw126.algorithms; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; /* 问题描述: 在单处理器上具有期限和惩罚的单位时间任务调度问题(课本P239) 实验要求: (1)实现这个问题的贪心算法 (2)将每个wi 替换为 max{w1,w2,...,wn}-wi,运行算法比较结果 */ /** * @author WSYW126 * @version 创建时间:2016年6月4日 下午8:29:32 类说明:Alljava */ public class TaskSchedul { private List<Task> tasks = null; // 所有任务 private List<Task> earlyTasks = null; // 早任务 private List<Task> lateTasks = null; // 晚任务 private Comparator<Task> comparator_d = null; private Comparator<Task> comparator_w = null; public static void main(String[] args) { //int[] d = {4, 2, 4, 3, 1, 4, 6}; // 各个任务的deadline //int[] w = {70, 60, 50, 40, 30, 20, 10}; // 各个任务的惩罚 int[] d = { 5, 3, 1, 4, 6, 4, 2, 2}; // 各个任务的deadline int[] w = { 60, 70