赞
踩
问题描述:
设有N个独立的作业{1,2,...,n},由M台相同的机器进行加工处理。作业i所需时间为Ti.约定:任何作业可以在任何一台机器上加工,处理单位完工前不允许中断处理,人和作业不能拆分成更小的作业。要求给出一种作业调度方案,使所给的N个作业,在尽可能短的时间内有M胎机器加工处理完成。
要求:随机生成N个作业相关信息,并计算由M台机器处理的最短时间
分析:多机调度问题使用的是贪心算法
贪心算法只考虑眼前利益,不通盘考虑问题的所有可能,每一步做出当时看起来最佳的选择(局部最优选择)利用贪心算法求解的问题往往具有两个重要的特性,谈心选择性质和最优子结构性质。如果满足这两个性质,就可以使用贪心算法了
贪心选择
所谓贪心选择性质,是指原问题的整体最优解,可以通过一系列局部最优的选择得到应用。同一规则,将原问题变为一个相似的,但规模更小的子问题,而后的每一步都是当前最佳的选择。这种选择依赖于自己做出的选择,但不依赖于味做出的选择。运用谈心策略解决的问题,在程序的运用过程中无回溯过程。
最优子结构
当一个问题的最优解包含其子问题的最优解释,称此问题具有最优子结构性质问题的最优子结构性质,是该问题是否可用贪心算法求解的关键。
作业项数为n,机器数为m。若n<=m,则一台机器随机分配一项作业,最长作业时间为机器所用最少时间。若n>m,则使用贪心算法寻求最佳解决方案,如下:
假设:一共有七项作业,解决时间分别为{5,4,16,14,3,2,6}
一共有三台机器,M1,M2,M3
首先,按照作业完成时间将作业从大到小排序,为{16,14,6,5,4,3,2}
然后分别将16,14,6安排在M1 M2 M3三台机器上,然后进行比较。16,14,6。6最小,所以将下一项作业5安排在M3机器上。5+6=11。在将16,14,11进行比较,11最小所以将下一项作业4安排在M3机器上。6+5+4=15。在将16,14,15进行比较,14最小,所以将3安排在M2机器上,14+3=17。在将16,15,17进行比较,15最小,所以将下一项作业2安排在M3机器上,15+2=17,将所有作业安排完毕后进行比较,16,17,17,机器运行时间最长为17,所以机器处理最短时间为17。
遇到的问题:设计随机的作业所用时间问题
解决方案:使用C语言获取随机数并赋值给数组
首先,创建一个数组,使用for循环,rand()函数,time()函数获取随机数并赋值
所用知识:①rand(),srand()需要头文件<stdlib.h> ,time()需要头文件<time.h>
②rand()函数是用来生成随机数的函数,通常生成随机数范围为0~32767
③rand()函数生成的随机数是由一个特殊数经过特定公式生成的,这个特殊数通常称为”种子“,种子在每次开机后不变,故这种情况下生成的随机数组每次都一样。
④所以我们希望种子数是随时变化的,这里就用到了每一秒值都会变化的time()函数
⑤time(0)的值表示从1970年1月1日零点到现在过去了多少秒,这个值现在大约是15亿多
⑥srand()是用来重新设置随机数”种子“的,srand(time(0));语句即可重新设置种子,从而rand()生成的数为真随机数。
⑦通过 rand()%(right-left+1)+left 取模运输技巧控制想要的随机数范围
使用for循环,rand()函数,time()函数获取随机数并赋值
先定义一个数组,使用srand(time(0));语句重新设置种子,使rand()生成的数为真随机数。利用for循环和rand()函数生成随机数,随机数范围为0~100,最后输出数组。
若作业项数小于机器数,则取时间最长作业所用时间为机器运行最短时间
若作业项数大于机器数,如下
应用
早上妈妈烧开水用了六分钟,刷牙用了两分钟,洗脸用了三分钟,泡茶用了两分钟,喝茶用了一分钟,妈妈最少用了几分钟?
对于我们初次自己设计代码的学生来说,这次课设,是我们自学能力的一次测试(有些东西自己从来没有接触过),也是对我们所学的基础知识的测试。在本程序中我学到了不少的知识,但也发现了很多不足之处。我学到了函数生成随机数,并且将自己在学校学到的知识进行了整理。了解了在做课设的时候最重要的并不是写代码,而是去了解我们要做什么,怎么做,对工作流程的理解及需求的分析。认识到许多不足:
本次课设也使我们有了做代码的经验
第一步: 需要理解整体构思,做到了然与胸
第二步: 动手之前,可以标注出注释,虽然代码里面注释越少越好,但是前期,注释可以代替我们的逻辑思维
第三步:优化代码,注意代码的可复用性,该提取的一定要提取,该总结的一定要总结
在这次课设中,除了让我们明白编程中需要能力,素质,知识之外,更重要的是学会了如何去完成一个任务,懂得了享受编程。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获取成功,一种自信心由然而生,这就是编程的乐趣。有时候也需要虚心请教,从别人的身上学习到自己没有的东西,每一次的挫折都在为成功铺路。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。