算法设计与分析大作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6、时空效率分析
算法Flowshop的主要计算时间花在对作业集的排序上。在这里,我们使用冒泡排
序法(BubbleSort),因此,在最坏情况下算法FlowJob所需要的计算时间为O(nlog n)。
所需要的空闲显然是O(n)。
.贪心算法解多机调度冋题
1、问题描述
多机调度问题要求给出一种作业调度方案, 使所给的n个作业在尽可能短的时间内由m台机 器加工处理完成。约定,每个作业均可在任何一台机器上加工处理, 但未完工前不允许中断处理。 作业不能拆分成更小的子作业。这个问题是NP完全问题,到目前为止还没有有效的解法。对于这 一类问题,用贪心选择策略有时可以设计出较好的近似算法。
{int i;
Jobtype *d = new Jobtype[ n];
for( i=0; i<n; i++)
{
d[i].key = a[i]>b[i]?b[i]:a[i];〃按Johnson法则分别取对应的b[i]或a[i]值作为关键字
d[i].job=a[i]v=b[i];〃给符合条件a[i]<b[i]的放入到N1子集标记为true
2、算法分析
贪心算法只需按顺序以数组方式提供ห้องสมุดไป่ตู้作业的加工时间和机器的台数;求出作业的个数,
若小于机器台数,就将作业逐个分配给就近的机器,所需要的加工时间,即为最长作业所需 时间。
若作业数大于机器台数,将作业按加工时间的多少降序排序,以机器数建立最小堆,先将 前m个作业分配给m个机器,最小堆顶是最小的元素(即m个作业中加工时间最少的作业), 将其移出并加上后续作业的加工时间,再插入堆,这时会改变原来的状态,升到堆顶的机器 力卩工总时间最少,它再移出加后续作业的加工时间,在插入堆,依此类推,直到全部作业结 束。堆中的最大值就是完成所有作业所需的最短时间。
3.部分算法实现5...
4.计算复杂性分析6...
5.运行结果6...
三.回溯法解决批作业调度问题6..
1.问题描述6...
2.算法思想6...
3.部分算法实现7...
4.运行结果8...
5.时间复杂性分析8...
四.作业调度算法比较8...
五.课程学习总结9...
摘要:
在现代企业中, 作业调度已成为提高资源利用率、 从而提高企业运行效益的关键环节之一。 把各个作业分配到车间现有的设备上, 并确定它们的先后次序, 这是一项复杂的工作 本文就 作业调度排序问题进行了研究,通过对几个经典作业调度算法的分析讨论,总结了各个算法 对作业调度的求解过程,并给出了每个算法的复杂度及性能分析。 关键词:作业调度;动态规划;贪心算法;回溯法;
2、算法分析
直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。在一般情 况下,机器M2上会有机器空闲和作业积压2种情况。
在一般情况下,机器M1开始加工S中作业时,机器M2还在加工其他作业,要等时间t后 才可利用。将这种情况下完成S中作业所需的最短时间记为T(S,t)。流水作业调度问题的最 优值为T(N,O)。
•动态规划算法解决流水作业调度
1、问题描述
给定n个作业,每个作业有两道工序,分别在两台机器上处理。一台机器一次只能处理
一道工序,并且一道工序一旦开始就必须进行下去直到完成。一个作业只有在机器1上的处
理完成以后才能由机器2处理。假设已知作业i在机器j上需要的处理时间为t[i,j]。流水 作业调度问题就是要求确定一个作业的处理顺序使得尽快完成这n个作业。
算法设计与分析大作业
目录
《算法设计与分析》课程大作业错.误!未定义书签。
一.动态规划算法解决流水作业调度2..
1、问题描述2...
2、算法分析2...
3.算法的描述2...
4、部分算法实现3...
5.运行结果4...
6、时空效率分析4...
二.贪心算法解多机调度问题4..
1、问题描述4...
2、算法分析4...
流水作业调度问题的Johnson算法:
(1)令N二{i|t[i,1]::t[i,2]}, N^{i |t[i,1] _t[i,2]};
(2)将中作业依的非减序排列;将中作业依的非增序排列; 作业接种作业构成满足Johnson法则的最优调度。
4、部分算法实现
int FlowShop(int n,int a[],int b[],int c[])
k=j<k?k+b[c[i]]:j+b[c[i]];〃计算最优加工时间
}
delete d;
return k;
}
5.运行结果
[作业在机器1上的运行时间为二
Is4 3 6 1
[作业在机器2上的运行时间为:
15 2 3 1 7
完成作业的最短时间为:19
编号从0开始,作业调度的顺序为:
4 0 2 1 3
Press any key to continne
{c[k--]=d[i].i ndex;
//属于N2的从后面进入,从而实现N1的非减序排序,N2的非增序 排序
}
}
j=a[c[0]];
k=j+b[c[0]];
for( i=1; i<n; i++)
{
j += a[c[i]];
〃M1在执行c[i]作业的同时,M2在执行c[i-1]号作业,最短执行时间取决于M1与M2谁后执行完
由流水作业调度问题的最优子结构性质可知,
T(N,OP mirn{aiT(N {i},bj}
T(S,t)= mSKa
尸S(2)
从公式(1)可以看出,该问题类似一个排列问题,求N个作业的最优调度问题,利用其 子结构性质,对集合中的每一个作业进行试调度,在所有的试调度中,取其中加工时间最短 的作业做为选择方案。将问题规模缩小。
公式(2)说明一般情况下,对作业集S进行调度,在M2机器上的等待时间,除了需要 等该部件在M1机器上完成时间,还要冲抵一部分原来的等待时间,如果冲抵已成负值,自然 仍需等待M1将作业做完,所以公式取max{t-ai,O}。
3.算法的描述
从分析可知,流水作业调度问题一定存在满足Johnson法则的最优调度,且容易由下面的 算法确定。
d[i].i ndex=i;
}
BubbleSort(d, n);
//对数组d按关键字升序进行排序
int j = 0,k = n-1;
for( i=0; i<n; i++)
{
if(d[i].job)
{
c[j++] = d[i].i ndex;
//将排过序的数组d,取其中作业序号属于N1的从前面进入
}
else
相关文档
最新文档