算法导论实验三一个任务调度问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三一个任务调动问题 问题描绘: 在单办理器上拥有限期和处罚的单位时间任务调动问题. 算法原理: 考虑一个给定的调动. 我们说一个任务在调动迟了 ,假如它在规定的时间以后达成 ; 不然,这个任务在该调动中是早的 .一个随意的调动总能够安排成早任务优先的形式 , 其 中早的任务老是在迟的任务以前. 为了搞清这一点, 请注意假如某个早任务 a(i) 跟在某个 迟任务a(j)以后,就能够互换a(i) 和a(j) 的地点, 其实不影响a(i)是早的a(j)是迟的状态. 近似的,随意一个调动能够安排成一个规范形式 , 此中早的任务先于迟的任务 ,且如期 限单一递加次序对早任务进行调动 .为了做到这一点,将调动安排成早任务优先形式. 然 而,只需在该调动中有两个分别达成于时间 k和k+1的早任务a(i)和a(j) 使得d(j)d(i), 就互换a(i)和a(j)的地点. 由于在互换前任务j是早的,k+1=d(j) .因此k+1d(j), 则 a(i)在互换以后任然是早的 .任务a(j) 被已到了调动中的更前地点 ,故它在互换后任然是 早的. 这样,找寻最优调动问题就成为找一个由最优调动中早的任务组成的会合 A的问题. 一旦A被确立后,便可如限期的单一递加次序列出 A中的全部元素,进而给出实质的调动 , 而后按随意次序列出迟的任务 (S-A),就能够产生出最优调动的一个规范序次. 称一个任务的会合A是独立的, 假如存在对于A中任务的一个调动 ,使得没有一个任务 是迟的.明显,某一调动中早任务的会合就组成一个独立的任务集. 实验数据: 输入: 没有输入,有一个构造体task,系统会随机生成task的限期和处罚输出: 分别输出随机生成task的会合后的早任务会合,迟任务处罚以及将每个替代为 后的早任务会合,迟任务处罚. 实验截图: 结果剖析: 能够看出将每个替代为后的早任务集 合基本上包含了没有替代是的早任务会合,而且替代后的迟任务处罚大于没有替代时的迟任务处罚. 源代码: 一般排序 /*贪婪算法实现单办理器任务调动。 基本思想是:第一依据处罚把各个任务降序排序。 *而后遍历任务,逐个确立能否能够放入独立子集 */  A #includeiostream #include #include usingnamespacestd; #definen8 structtask { intid;d=i; ta[i].d=1+rand( )%20; ta[i].w=rand( )%50; } } voidprint(taskta) { coutid=\td=\tw=endl; } voidcopy(taskt,tasks) { ; ; ; } voidsortW(taskta[])ta[j+1].w)ta[j+1].d) { copy(s,ta[j]); copy(ta[j],ta[j+1]); copy(ta[j+1],s); } } } } intgreedy(taska[],taskta[]); k=1; for(i=0;i=n;i++) { if(i=a[0].d) Nt[i]=1; else Nt[i]=0; } for(i=1;in;i++) { for(j=ta[i].d;j=n;j++) { if(Nt[j]+1j);j=n;j++); } for(i=0;in;i++) { sum2+=ta[i].w; } returnsum2-sum1; } intmain( ) { tasktasker[n];; for(i=0;in;i++) maxweg=tasker[i].w; } k=greedy(A,tasker); sortD(A,k);=maxweg-tasker[i].w; } k=greedy(A,tasker); sortD(A,k); cout改变后最优调动方案的早任务为:endl; for(i=0;ik;i++) { print(A[i]); } cout改变后迟任务处罚为:getW(A,tasker,k)endl;return0; }

文档评论(0)

158****2773 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档