算法导论之贪心算法:带惩罚的任务调度算法

带惩罚的任务调度问题

单处理器上带截止时间和惩罚的单位时间任务调度问题有以下输入:

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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值