- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机算法实验3 贪心算法 报告
《算法设计与分析》姓名:班级:学号:课题:贪心算法指导教师:2014/1/6代码附后面1实验目的与要求1、熟悉多机调度问题的算法2、初步掌握贪心算法3、熟悉贪心算法的基本原理与适用范围4、使用贪心算法编程,求解最小生成树问题5、掌握汽车加油问题的算法2实验内容2.1基本题一:多机调度问题2.1.1问题概述要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。提示:1、把作业按加工所用的时间从大到小排序2、如果作业数目比机器的数目少或相等,则直接把作业分配下去3、?如果作业数目比机器的数目多,则每台机器上先分配一个作业,如下的作业分配时,是选那个表头上s最小的链表加入新作业。2.1.2实验截图按照书本例题数据,7个作业分给3台机器,完成时间为17,实验结果如下:2.2提高题一:用贪心算法求解最小生成树2.2.1问题概述任选一种贪心算法(Prim或Kruskal),求解最小生成树。对算法进行描述和复杂性分析。编程实现,并给出测试实例2.2.2实验截图算法为Kruskal,选用书本例题数据,六个定点,十条边,求解结果如下:2.3提高题二:汽车加油问题2.3.1问题概述一辆汽车加满油后可以行驶N千米。旅途中有若干个加油站。若要使沿途的加油次数最少,设计一个有效的算法,指出应在那些加油站停靠加油。并证明你的算法能产生一个最优解。把两加油站的距离放在数组中,a[1..n]表示从起始位置开始跑,经过n个加油站,a[k]表示第k-1个加油站到第k个加油站的距离。汽车在运行的过程中如果能跑到下一个站则不加油,否则要加油。2.3.2实验截图输入3代表加油站段目,50代表加油后最大行驶距离结果如下:再换一个例子:3实验心得这次算法实验的主要内容是贪心算法的使用,包括多机调度问题,最小生成树问题(采用Kruskal算法),汽车加油问题。贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。贪心算法是算法的重要内容之一,可以高效地解决许多问题。采用贪心算法会比动态规划高效方便,如果都能解决某个问题的话。现在我学习贪心算法的时间还不长,理解还很浅显,以后要多加练习,这样才能做到熟练运用。基本题一:多机调度问题#includeiostream using namespace std;#define N 10 typedef struct node {int ID, time;//作业所需时间 }jobnode; typedef struct Node {int ID, avail;//ID 机器编号 avail 每次作业的初始时间}manode; manode machine[N]; jobnode job[N]; /*找出下个作业执行机器 */manode* Find_min(manode a[], int m) {manode* temp = a[0]; for (int i = 1; im; i++) {if (a[i].availtemp-avail) temp = a[i];}return temp;} /*对作业时间由大到小进行排序 */void Sort(jobnode t[], int n) {jobnode temp;for (int i = 0; in - 1; i++) for (int j = n - 1; ji; j--) {if (job[j].timejob[j - 1].time) {temp = job[j];job[j] = job[j - 1]; job[j - 1] = temp;}}}void main() {int n, m, temp, i; manode* ma;printf(输入作业数目(作业编号按输入顺序处理)\n); cinn;printf(输入相应作业所需处理时间:\n); for (i = 0; in; i++) {cinjob[i].time; job[i].ID = i + 1;}printf(输入机器数目(机器编号按输入顺序处理)\n); cinm;for (i = 0
您可能关注的文档
最近下载
- 2025年安全第一课:全体员工安全意识及安全知识培训.ppt
- 面部表情疼痛量表FPS-R.docx VIP
- 外研社新_跨境电商交际英语_修订版__Unit_2_Asking_about_Product教案.docx VIP
- 【外研版】(新教材)2022版高中英语选择性必修第一册课件:UNIT 4 Meeting the muse.ppt VIP
- 承插式盘扣脚手架专项施工方案.docx VIP
- 1 7万条中文同义词词库完整打印.pdf VIP
- NB_T 10947-2022 煤矿用带式输送机 逆止托辊 技术条件.docx VIP
- 电影的声音详解.ppt VIP
- 甲烷二氧化碳重整精要.ppt VIP
- 一种基于零基线单差残差的GNSS接收机观测值精度计算方法.pdf VIP
文档评论(0)