ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:73.79KB ,
资源ID:29403097      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29403097.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计报告材料贪心算法任务调度问题.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计报告材料贪心算法任务调度问题.docx

1、课程设计报告材料贪心算法任务调度问题数据结构课程设计报告贪心算法:任务调度问题的设计专业学生姓名班级学号指导教师完成日期贪心算法:任务调度问题的设计1 设计内容 有n项任务,要求按顺序执行,并设定第I项任务需要ti单位时间。如果任务完成的顺序为1,2,n,那么第I项任务完成的时间为ci=t1+ti,平均完成时间(ACT)即为(c1+.+cn)/n。本题要求找到最小的任务平均完成时间。2)输入要求输入数据中包含n个测试案例。每一个案例的第一行给出一个不大于2000000的整数n,接着下面一行开始列出n各非负整数t(t1000000000),每个数之间用空格相互隔开,以一个负数来结束输入。3)输出

2、要求对每一个测试案例,打印它的最小平均完成时间,并精确到0.01。每个案例对应的输出结果都占一行。若输入某一个案例中任务数目n=0,则对应输出一个空行。2 设计分析 这个题目属于贪心算法应用中的任务调度问题。要得到所有任务的平均完成时间,只需要将各个任务完成时间从小到大排序,任务实际完成需要的时间等于它等待的时间与自身执行需要的时间之和。这样给出的调度是按照最短作业优先进行来安排的。贪心算法通过一系列的选择来得到一个问题的解。它所做的每一个选择都是当前状态下某种意义的最好选择,即贪心选择。在许多可以用贪心算法求解的问题中一般具有两个重要的性质:贪心选择性质和最有子结构性质。所谓贪心选择性只是指

3、所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到,这是贪心算法可行的第一基本要素。对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所做的贪心选择最终将会得到问题的一个整体最优解。首先考察问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始。而且做了贪心选择后,原问题简化为一个规模更小的类似子问题。然后,用数学归纳法证明,通过每一步做贪心选择,最终可得到问题的一个整体最优解。其中,证明贪心选择后问题简化为规模更小的类似子问题的关键在于利用该问题的最优子结构性质。当一个问题的最优解包含着它的子问题最优解时,称此问题具有最优子结构性质,这个性质是该问题可用

4、贪心算法求解的一个关键特征。2.1 排序(将数组按照从小到大排序)的设计 排序的方法有很多,如:冒泡排序、希尔排序、堆排序等,这些排序的方法都可以使用。这里采用希尔排序来实现。 它的基本思想是:先取一个小于n的整数d1作为第一个增量;这里选取n的一半作为第一个增量(increment=n1),把数组的全部元素分成d1个组。所有距离为d1的倍数的记录放在同一组中。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量d1=1(dtdt-1d21;increment0;increment=1) for(i=increment;i=increment;j-=inc

5、rement) if(temp=0;) scanf(%ld,&n); if(n2000000) printf(too much for the project!n); exit(0); if(n0) b=(long * )malloc(n * sizeof(long); a=b; for(i=0;i1000000000) printf(too much for the project!n); exit(0); /*对输入中出现任务时间为负数的异常处理*/ if(*(b+i)0;i-,a+) rj+=(double)*a/(double)n*i; j+; free(b); /*当n为0时,标志相

6、应的r数组值为-1.输出时遇到-1,则输出一个空行*/ else if(n=0) rj+=-1; for(i=0;ij;i+) if(ri=-1)printf(n);/*输出一个空行8*/ else printf(%.2fn,ri);/*输出的结果要求精确到0.01*/ return 1;4测试方法 这个程序主要需要测试以下几个方面: 当任务个数为0时,需要对应输出一个空行。 当输入的作业数目大于2000000,或者单个作业完成的时间大于1000000000的时候,程序要求报错。 另外,当任务数比较大的时候,输入对应的任务时间是要仔细,务必保证输入的任务个数与要求的任务数一直。如果出现输入的任

7、务数与n值不相符时,程序应会报错,输出“input error!”的错误。 5 程序运行效果5.1正确输入正确输出。图5.1 正确输入输出数据图5.2异常输入数据5.2.1输入数据超出2000000。图5.2.1 超出作业数目异常图5.2.2任务数较大时输出任务个数与要求任务数不一致。 图5.2.2 任务数不一致异常图5.2.3 单个作业完成时间大于1000000000。图5.2.3 单个作业完成时间超出异常图6 设计心得 通过本次课程设计我在数据结构编程方面领悟了很多。看到这个选题的时候,其实我并不知道贪心算法是什么算法,甚至都无从下手去设计关于这个的编程以及它的报告。 虽然在中间写的过程中

8、还有很多不会的东西,但是通过查看书本和资料还有问同学,基本上都解决了。但仍然有一些有待提高的地方,比如在排序前后的结果比较和如果运行时间长的任务在等待很长时间都没有运行等较高的要求还没有解决。 设计根据书本以及老师和同组同学的帮助,本次设计也算是完成了。我在这次设计中其实自己也没花好时间去完成。关于程序方面也有许多的不明白。但是通过本次设计,我也领悟到自身有许多的不足。以后会更加花心思,下功夫去完成好每一个老师给予的任务,从而提高自己。 我觉得课程设计的作用一方面是最基本的就是要完成这一科目,差不多也是对自己的一个阶段性的总结;还有就是在整个设计的过程中,让我们认真的独立思考,在和同学交流的过

9、程中也增强了我们的语言组织能力和彼此之间的友谊。通过课程设计让我们不断的发现自己的不足从而去改善,这是一种学习的态度,不仅仅是在这次的课程设计中,在以后的无论生活还是学习方面都应该注意和努力改善。7附录#include#includevoid Shellsort(long *a,long n);int main() long n,i,j; long *a,*b; double r100; j=0; for(n=0;n=0;) scanf(%ld,&n); if(n2000000) printf(too much for the project!n); exit(0); if(n0) b=(lo

10、ng* )malloc(n * sizeof(long); a=b; for(i=0;i1000000000) printf(too much for the project!n); exit(0); if(*(b+i)0;i-,a+) rj+=(double)*a/(double)n*i; j+; free(b); else if(n=0) rj+=-1; for(i=0;i1;increment0;increment=1) for(i=increment;i=increment;j-=increment) if(temp*(a+(j-increment)*(a+j)=*(a+(j-increment); else break; *(a+j)=temp;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1