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

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

  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文档。上传文档
查看更多
算法导论-实验三--一个任务调度问题 算法导论-实验三--一个任务调度问题 PAGE 算法导论-实验三--一个任务调度问题 实验三 一个任务调度问题 问题描述: 在单处理器上具有期限和惩罚的单位时间任务调度问题. 算法原理: 考虑一个给定的调度. 我们说一个任务在调度迟了, 如果它在规定的时间之后完成; 否则, 这个任务在该调度中是早的. 一个任意的调度总可以安排成早任务优先的形式, 其中早的任务总是在迟的任务之前. 为了搞清这一点, 请注意如果某个早任务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 */ #include iostream #include #include using namespace std; #define n 8 struct task { int id;d = i; ta[i].d = 1 + rand() % 20; ta[i].w = rand() % 50; } } void print(task ta) { cout id= \td= \tw= endl; } void copy(task t, task s) { = ; = ; = ; } void sortW(task ta[]) ta[j + 1].w)ta[j + 1].d) { copy(s, ta[j]); copy(ta[j], ta[j + 1]); copy(ta[j + 1], s); } } } } int greedy(task a[], task ta[]); 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; i n; i++) { sum2 += ta[i].w; } return sum2 - sum1; } int main() { task tasker[n];; for (i = 0; i n; 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; i k; i++) { print(A[i]); } cout 改变后迟任务惩罚为: getW(A, tasker, k) endl; return 0; }

文档评论(0)

练习题大师 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档