算法设计与分析课程大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目作业调度问题及算法分析
学院名称:计算机与信息工程学院
专业名称:计算机科学与技术
目录
《算法设计与分析》课程大作业.................................................................... 错误!未定义书签。一.动态规划算法解决流水作业调度. (4)
1、问题描述 (4)
2、算法分析 (4)
3. 算法的描述 (5)
4、部分算法实现 (6)
5. 运行结果 (8)
6、时空效率分析 (8)
二.贪心算法解多机调度问题 (8)
1、问题描述 (8)
2、算法分析 (9)
3.部分算法实现 (9)
4.计算复杂性分析 (11)
5. 运行结果 (12)
三.回溯法解决批作业调度问题 (12)
1.问题描述 (12)
2.算法思想 (13)
3. 部分算法实现 (14)
4.运行结果 (15)
5.时间复杂性分析 (15)
四.作业调度算法比较 (16)
五.课程学习总结 (16)
摘要:
在现代企业中,作业调度已成为提高资源利用率、从而提高企业运行效益的关键环节之一。把各个作业分配到车间现有的设备上,并确定它们的先后次序,这是一项复杂的工作本文就作业调度排序问题进行了研究,通过对几个经典作业调度算法的分析讨论,总结了各个算法对作业调度的求解过程,并给出了每个算法的复杂度及性能分析。
关键词:作业调度;动态规划;贪心算法;回溯法;
一.动态规划算法解决流水作业调度
1、问题描述
给定n 个作业,每个作业有两道工序,分别在两台机器上处理。一台机器一次只能处理一道工序,并且一道工序一旦开始就必须进行下去直到完成。一个作业只有在机器1上的处理完成以后才能由机器2处理。假设已知作业i 在机器j 上需要的处理时间为t[i,j]。流水作业调度问题就是要求确定一个作业的处理顺序使得尽快完成这n 个作业。
2、算法分析
直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。在一般情况下,机器M2上会有机器空闲和作业积压2种情况。
在一般情况下,机器M1开始加工S 中作业时,机器M2还在加工其他作业,要等时间t 后才可利用。将这种情况下完成S 中作业所需的最短时间记为T(S,t)。流水作业调度问题的最优值为T(N,0)。 由流水作业调度问题的最优子结构性质可知,
)}},{({min )0,(1i i n i b i N T a N T -+=≤≤(1)
})}0,max{},{({min ),(i i i S i a t b i S T a t S T -+-+=∈(2) 从公式(1)可以看出,该问题类似一个排列问题,求N 个作业的最优调度问题,利用其子结构性质,对集合中的每一个作业进行试调度,在所有的试调度中,取其中加工时间最短的作业做为选择方案。将问题规模缩小。
公式(2)说明一般情况下,对作业集S 进行调度,在M2机器上的等待时间,除了需要等该部件在M1机器上完成时间,还要冲抵一部分原来的等待时间,如果冲抵已成负值,自然仍需等待M1将作业做完,所以公式取max{t-ai,0}。
3. 算法的描述
从分析可知,流水作业调度问题一定存在满足Johnson 法则的最优调度,且容易由下面的算法确定。
流水作业调度问题的Johnson 算法:
(1)令]}2,[]1,[|{]},2,[]1,[|{21i t i t i N i t i t i N ≥=<=;
(2)将中作业依的非减序排列;将中作业依的非增序排列; 作业接种作业构成满足Johnson 法则的最优调度。
4、部分算法实现
5. 运行结果
6、时空效率分析
算法Flowshop的主要计算时间花在对作业集的排序上。
在这里,我们使用冒泡排序法(BubbleSort),因此,在最坏情
况下算法FlowJob所需要的计算时间为)
n
O。所需要的空
log
(n
闲显然是)
O。
(n
二.贪心算法解多机调度问题
1、问题描述
多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。这个问题是NP完全问题,到目前为止还没有有效的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。
2、算法分析
贪心算法只需按顺序以数组方式提供各作业的加工时间和机器的台数;求出作业的个数,若小于机器台数,就将作业逐个分配给就近的机器,所需要的加工时间,即为最长作业所需时间。
若作业数大于机器台数,将作业按加工时间的多少降序排序,以机器数建立最小堆,先将前m个作业分配给m个机器,最小堆顶是最小的元素(即m个作业中加工时间最少的作业),将其移出并加上后续作业的加工时间,再插入堆,这时会改变原来的状态,升到堆顶的机器加工总时间最少,它再移出加后续作业的加工时间,在插入堆,依此类推,直到全部作业结束。堆中的最大值就是完成所有作业所需的最短时间。
3.部分算法实现
4.计算复杂性分析
当n≤m 时,所有作业可以一次安排给各机器,算法greedy需要o(1) 时间。当n>m 时,排序耗时O(nlogn)。初始化堆需要O(m) 时间。关于堆的removeMin和put运算共耗时O(nlogm),因此算法greedy 所需的计算时间为O(nlogn+nlogm)=O(nlogn)。