算法分析-贪心算法解汽车加油问题-实验报告(共7页).doc
-
资源ID:14318011
资源大小:75KB
全文页数:7页
- 资源格式: DOC
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
算法分析-贪心算法解汽车加油问题-实验报告(共7页).doc
精选优质文档-倾情为你奉上综合性、设计性实验报告姓名 唐艳 学号 4专业 计算机科学与技术 班级2009级 班实验课程名称 算法设计与分析 指导教师及职称 吕兰兰 讲师 开课学期 2011 至 2012 学年 上 学期上课时间 2011年 10 月 18 日 湖南科技学院教务处编印专心-专注-专业一、实验设计方案实验名称:贪心算法实例编程实验时间:2011-11-08 小组合作: 是 否小组成员:无1、实验目的: 1) 理解贪心算法的概念2) 掌握贪心算法的基本要素3) 掌握设计贪心算法的一般步骤4) 针对具体问题,能应用贪心算法设计有效算法5) 用C+实现算法,并且分析算法的效率2、实验设备及材料:(注意:请自行填写,按实际情况写,各位同学的实验报告应有所区别)硬件设备: PC机一台机器配置:良好操作系统:windows 7开发工具:VC+6.03、实验内容: 问题描述一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并说明算法能产生一个最优解。编程任务对于给定的n和k个加油站位置,编程计算最少加油次数。样例例如,现在汽车加满油之后可跑7公里,途中共有7个加油站,各个加油站之间的距离为1公里、2公里、3公里、4公里、5公里、1公里、6公里、6公里。那么,汽车可在_第三,第四,第五,第七个加油站_(哪几个加油站)加油,使沿途加油次数最少,只需加油_4_次。4、实验方法步骤及注意事项:(注意:此部分为本实验的关键部分,请自行填写,不得雷同!)实验步骤(请参考教材自行总结归纳之后再认真填写)问题分析由于汽车是由始向终点方向开的,我们最大的麻烦就是不知道在哪个加油站加油可以使我们既可以到达终点又可以使我们加油次数最少。提出问题是解决的开始.为了着手解决遇到的困难,取得最优方案。我们可以假设不到万不得已我们不加油,即除非我们油箱里的油不足以开到下一个加油站,我们才加一次油。在局部找到一个最优的解。却每加一次油我们可以看作是一个新的起点,用相同的方法进行下去。最终将各个阶段的最优解合并为原问题的解得到我们原问题的求解。加油站贪心算法设计(C+):#include<stdio.h>#include"iostream.h"#include <fstream.h>int greed(int n,int k,int *a)int sum=0,count=0;ifstream fin;fin.open("D:input.txt");ofstream fout("D:output.txt");for(int i=1;i<=k+1;i+)sum+=ai;if(sum>n)count+;sum=0;i-;fout<<i<<","return count;int main() int n,k,i,number;int a100;ifstream fin;fin.open("D:input.txt");ofstream fout("D:output.txt"); fin>>n;fin>>k;for(i=1;i<=k+1;i+)fin>>ai;if(ai>n)printf("No Soluthion!");elsenumber=greed(n,k,a);fout<<number;解题思路(注意:以下部分仅为提示,请自行填写;若表格不够,可自行拉伸。)1) 确定求解汽车加油问题的贪心选择策略。2) 给出使用贪心算法求解汽车加油问题的算法,用C+语言描述。要求:求解汽车加油问题时,不仅要求出所需的最小加油次数(即最优值),而且还要求出应在哪些加油站加油(即最优解)。3) 证明上述算法的正确性。(可选) 需证明:汽车加油问题始终存在以贪心选择开始的最优解,以及汽车加油问题具有最优子结构性质。贪心算法正确性证明:l 贪心选择性质所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。对于一个具体的问题,要确定它是否具有贪心性质,我们必须证明每一步所作的贪心选择最终导致问题的一个整体最优解。根据贪心选择,在该题中,为使加油次数最少就会选择距离加满油得点远一些的加油站去加油,因此,加油次数最少满足贪心选择性质。l 最优子结构性质:当一个问题大的最优解包含着它的子问题的最优解时,称该问题具有最优子结构性质。由于(b1,b2,bn)是这段路程加油次数最少的一个满足贪心选择性质的最优解,则易知若在第一个加油站加油时,b1=1,则(b2,b3,bn)是从 a2到an这段路程上加油次数最少且这段路程上的加油站个数为(a2,a3,an)的最优解,再者,每个过程从加油开始行驶到再次加油满足贪心且每一次加油后相当于与起点具有相同的条件,每个过程都是相同且独立,也就是说加油次数最少具有最优子结构性质。5实验数据处理方法:数据输入由文件input.txt给出输入数据。第一行有2 个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。结果输出将编程计算出的最少加油次数以及应在哪些加油站加油输出到文件output.txt。如果无法到达目的地,则输出”No Solution”。6参考文献:计算机算法设计与分析(第3版) 王晓东著 电子工业出版社算法设计与实验题解王晓东著 电子工业出版社指导老师对实验设计方案的意见:指导老师签名:吕兰兰 2011年 11 月 10 日 二、 实验报告1、实验目的、设备与材料、实验内容、实验方法步骤见实验设计方案2、实验现象、数据及结果(请自行填写真实结果)序号输入文件(input.txt)输出文件(output.txt)0.7 71 2 3 4 5 1 6 641.3708 633 20 83 77 26 59 6702.630 3746 43 94 77 45 98 11 60 15 42 7 69 61 54 51 65 50 16 28 60 91 17 44 54 93 52 32 54 41 80 88 54 55 27 58 59 92 7333.181 4654 94 61 51 51 57 73 96 32 45 97 73 44 88 25 14 53 59 79 41 63 100 25 57 35 55 61 88 54 40 77 1 53 86 67 59 13 56 96 56 75 45 37 76 99 41 94183、对实验现象、数据及观察结果的分析与讨论:(对输入数据和相应输出结果按照你所设计的算法进行分析,举12个例子即可。要求分析出一个输入的最优解。)例:输入:7 8 1 3 5 1 5 4 1 6 7输出:54、结论:(包括:使用的算法设计方法是否正确,是否也可以用其他方法解决,算法效率如何?程序的编译是否通过,程序的输出结果是否正确等)该实验使用的算法基本正确,程序编译通过。程序结果正确。时间复杂度为O(n)。5、实验总结1)、本次实验成败之处及其原因分析:注:从技术角度来分析实验的成功或失败,分析实验过程中出现了哪些问题,程序出现了什么错误,出现错误的具体原因是什么,以及是如何解决的。本次实验基本成功。只是最后输出加油的次数的数据覆盖了之前写入output文件中的在第1次在哪个加油站加油的数据。不知道应该在文件打开的语句中修改,使它可以在已经存在的文件中追加数据,而不是覆盖。2)、本实验的关键环节及改进措施:做好本实验需要把握的关键环节: 在greed函数中,判断sum>n后,i的次数要减1。因为在距离大于可行驶的距离之前就应该之前的加油站加油了。(如实填写,忌文不对题)若重做本实验,为实现预期效果,仪器操作和实验步骤应如何改善:我认为此贪心算法不需要再改进,够贪心了。(如实填写,忌文不对题)3)、对实验的自我评价:对文件的输入输出的使用还没完全掌握。(注:自己的体会、感想和收获等)指导老师评语及得分:签名: 吕兰兰 2011年 11 月 15 日