在单处理器上具备期限和惩罚的单位时间任务调度问题。算法
任务调度问题就是给定一个有穷单位时间任务的集合S,集合S中的每一个任务都有一个截止期限di和超时惩罚wi,须要找出集合S的一个调度,使得因任务误期所致使的总惩罚最小,这个调度也称为S的一个最优调度。.net
实现任务的最优调度主要就是利用贪心算法中拟阵的思想。若是S是一个带期限的单位时间任务的集合,且I是全部独立的任务集构成的结合,则对应的系统M=(S,I)是一个拟阵。利用拟阵解决任务调度问题的算法原理主要就是将最小化迟任务的惩罚之和问题转化为最大化早任务的惩罚之和的问题,也就是说在任务调度的时候优先选择当前任务序列中惩罚最大的任务。这里,假设集合A存听任务的一个调度。若是存在关于A中任务的一个调度,使得没有一个任务是迟的,称任务集合A是独立的。实现该问题的贪心算法以下:排序
A <- Ø原理
Sort S[M] into monotonically decreasing order by w循环
for each x∈S[M]下载
do if AU{x} ∈ I[M]im
then A <- AU{x}call
初始时A为空集,而后对S中的全部任务按惩罚大小降序排序,而后进入循环。循环的过程当中依次访问S的中全部任务,而后进行独立性检查,若是当前任务x加入集合A以后A依然是独立的,则将A置为AU{x},不然检查下一个任务直到扫描结束,最后所获得的集合A便是一个最优子集,而后进行相应的调整获得最后的输出。d3
(1)任务调度问题的输入:数据
a) 任务的数量n,即表示当前任务集合S={a1,a2,a3……an};
b) n个任务的期限d1,d2,d3……dn,每一个任务的di知足1≤ di ≤n,且任
务要求ai在di以前完成;
c) n个任务的权(惩罚)w1,w2,w3……wn。表示任务ai若是没在时间di
以前完成,则致使惩罚wi,若是任务在期限以前完成,则没有惩罚; 同时在本实验中,还会将每一个wi值替换为max{w1,w2,w3……wn}-wi,并运行算法进行第二次实验,而后比较两次实验所得结果。
在本次实验中,n取值为7,每一个任务的期限为4,2,4,3,1,4,6,对应的惩罚为70,60,50,40,30,20,10。
(2)任务调度问题的输出:
a) 贪心算法所选的任务以及放弃的任务,所选的任务即表示最终会在期限
内完成的任务。放弃的任务表示最终会因误期而受到惩罚的任务。
b) 最终的最优调度序列
c) 最优调度所带来的总的惩罚数
下载连接:http://download.csdn.net/detail/zhh1992/8359281