调度问题研究.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
调度问题研究.doc

题目:关于一般性调度问题的研究 摘要:问题描述简单调度算法 作者:冷磊 首先,先描述一下什么是调度问题。 在现实世界中,人们可能经常会遇到这样一个问题:同时面临很 多项任务,这些任务之中有的任务必须要在某些其他任务完成之后才 能完成,或者有的任务之间互不干扰,谁先谁后并无多大关系;并且 现在也有一个小的团队,团队里的人都能独立完成这些任务中的各个 小项冃。现在问题出来了,要怎样给这些人分配任务,并且怎样分配 这些任务的先后顺序,才能使我们完成之间时的效率达到最高。 这对这样的问题,我们将其抽象为一个数学模型,就是我们所说 的一般性的调度问题,一般性调度问题是指这样的一类问题: 给定有穷的任务集T = {佥I刃wN+}和m台相同的机器,T上存在偏 序关系Y, 如果“Yf2,那么必须保证任务九完成之后才能去完成九Vr€?,/(/)表 示完成任务t所需的时间,d(f)表示任务t的截止时间,/(f),d(f)wZ + , 设开始时间为0,5:T—{0丄2.?…}表示对任务集T的一个调度方案, 其中表示任务t的开始时间, 设Q = max{/⑴+ /(/) 1/丘门表示完成任务的最终口寸间,假设每一项任务 都可以安排到任何一台机器上执行?找出可以用于执行的■这个》称 为可行调度.一个可行调度必须满足一下3个条件: 每项任务都要在截止吋间Z前完成 同时工作的的不同机器台数不超过m 任务安排必须满足任务集的偏序约束,即上文所说的某项任务必 须在某些项任务完成之后才能完成 用数学公式将这三个条件表达出来就是: 1? X 訂,5(f)+/(/) d(f); 2? Vf,Oz D,\{teT\i (S(f) + da)} IS m ; 3? Vtl./2 w Y /2 =》() + /(“) 5(/2) 举一个例子来说明这个问题: 在这个图中,忽略了自反关系,因为在拓扑排序中自反关系并不会发 挥作用,假设这个问题屮我们有两台机器,我们由此可以给出至少两 种调度方案: 其屮ti表示任务,数字表示完成此项任务所花费的时间,现在我们的 任务是找到最优的调度组合,使在这两台机器上完成这个任务的效率 最高,即时间最短: 分析:将偏序关系拓展为拓扑排序,将自反关系剔除,进行分析可得 下列方案:(表格中空表示机器不运转) 方案一: tl t2 t4 t6 时长 t3 t5 8 方案二: tl t3 t5 t6 时长 t2 t4 7 相对方案一来说,方案二效率更高,第二个方案为最优调度。 当然,对于一般性调度问题,现在还没又有效地算法,不过, 如果将机器个数简化为1个,调度问题就大大简化了,相当于只是求 一个偏序关系的拓扑排序?针对这种状况,我们将这个有向图写成矩阵 形式(说明:只要两个节点能找到一条路,那么此位置的元素就为匕否 则为0),根据这个假设,上面图的矩阵就可以写出如下: tl t2 t3 t4 t5 t6 ti 0 0 1 1 0 1 a 0 0 1 1 1 1 r3 0 0 0 0 0 1 tA 0 0 0 0 0 1 t5 0 0 0 0 0 1 t6 0 0 0 0 0 0 对于这个矩阵的求解,即利用这个矩阵求出一个拓扑排序,算法如下: 川=6 1 .对 i: 1 — 6, S/ =工如 7=1 将$(i:lT6)由小到大排序 排在前面的先执行,依次输出 下面进行算法实现,源代码如下: #includestdio.h int main() { int ij,s[6]={0},a[6][6],*p[6],*t; printf(H请输入矩阵:\nH); for(i=0;i6;i++) for(j=0;j6;j++) for(i=0;i6;i++) for(j=0;j6;j++) s[i]+=a[j][i]; p[i]二s[i]; } for(i=0;i6;i++) for(j=i;j6;j++) if(*p[i]*p[j]) { t=p[i]; p[i]=p[jl; P[j]=t; } printf(n\n\n 一个可能的拓扑排序为:\rT); for(i=0;i6;i++) printf(H%d Hzp[i]-s+l); printf(,,\n\nH); return 0; } 上机运行结果为: 上机运行结果与实际相符合。 后记:由于我们知识水平的限制,此文屮一定存在很多瑕疵,还望教 员指正。

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档