《算法分析与设计》实验指导书.docVIP

  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文档。上传文档
查看更多
《算法分析与设计》实验指导书《算法分析与设计》实验指导书

《算法分析与设计》实验指导书 本书是为配合《算法分析与设计实验教学大纲》而编写的上机指导,其目的是使学生消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。 上机实验一般应包括以下几个步骤: (1)、准备好上机所需的程序。手编程序应书写整齐,并经人工检查无误后才能上机。 (2)、上机输入和调试自己所编的程序。一人一组,独立上机调试,上机时出现的问题,最好独立解决。 (3)、上机结束后,整理出实验报告。 实验报告应包括:算法描述、程序清单、运行结果、对运行情况所作的分析。 本书共分阶段3个实验,每个实验有基本题和提高题。基本题必须完成,提高题根据自己实际情况进行取舍。 其具体要求和步骤如下: 实验一 实验名称:贪心算法应用及设计 实验学时:4学时 实验类型:验证 实验目的: 理解贪心算法的基本思想 掌握利用贪心算法求解问题的求解步骤 实验内容 活动选择问题  (2学时) 问题描述:  设有11个会议等待安排,用贪心法找出满足目标要求的会议集合,这些会议按结束时间的非减序排列如下表。 会议i 1 2 3 4 5 6 7 8 9 10 11 开始时间bi 1 3 0 5 3 5 6 8 8 2 12 结束时间ei 4 5 6 7 8 9 10 10 12 13 14 实验实现提示: 数据结构设计:    将会议开始时间存储在数组B中,结束时间存储在数组E中,数组下标为会议的代码。结果存储在数组A中,其元素A[i]==true,表示会议i被选中。 2)算法: void GreedySelect(int n, struct time B[], struct time E[], bool A[]) { int i,j; A[1]=true; j=1; i=2; while( i=n) if (B[i]=E[j]) { A[i]=true; j=i;} else A[i]=false; } 思考题:证明所得的解是最优解? 2. 汽车加油问题(2学时) 问题描述: 一辆汽车加满油后可以行驶N千米。旅途中有若干个加油站(假设出发时油箱是空的) 实验实现提示: 1). 对于这个问题有以下几种情况:设加油次数为k,每个加油站离上一个加油站距离为a[i];i=0,1,2,3……n,其中a[0]=0;用数组b存储结果,如果b[i]=true,则说明在加油站i进行了加油。 a.始点到终点的距离小于N,则加油次数k=0; b.始点到终点的距离大于N, A 加油站间的距离相等,即a[i]=a[j]=L=N,则加油次数最少k=n; B 加油站间的距离相等,即a[i]=a[j]=LN,则不可能到达终点; C 加油站间的距离相等,即a[i]=a[j]=LN,则加油次数k=n/N(n%N==0)或k=[n/N]+1(n%N!=0); D 加油站间的距离不相等,即a[i]!=a[j],则加油次数k通过以下算法求解。 2)算法 int Tanxin(int a[ ], int b[ ],int n, int N) //N为一辆汽车加满油后可以行驶N千米 { int i,j; int s; //汽车在每次加满油之后已行驶的距离 int k;//加油的次数 b[0]=true; i=1; j=1; s=0;k=0; while( i=n) { s=s+a[i]; if( sN ) { j=i-1; b[j]=true; s=0;k=k+1;} else if (s==N) { j=i; b[j]=true; s=0;k=k+1;} else { j=i; b[j]=false;} i=i+1; } } 思考题: 1)如果算法中:else if (s==N) { j=i; b[j]=true; s=0;k=k+1;} 删除会不会影响最终结果? 2)如果将前面ABC三种情况加以考虑,则算法如何调整? 3.提高题 问题描述: 任选一种贪心算法(Prim或Kruskal),求解最小生成树。对算法进行描述和复杂性分析。 编程实现,并给出测试实例 实验二 实验名称:分治法算法应用及设计 实验学时:4学时 实验类型:验证 实验目的: 理解分治法算法的基本思想 掌握利用分治法算法求解问题的求解步骤 实验内容 二分检索  (2学时) 问题描述: 利用分治法,写一个二分检索的递归算法,在计算机上编程实现,同时进行时间复杂性分析。(要求用递归方法实现) 实验实现提示: 数据结构设计:    将待查数据集合存储在数组data中,用

文档评论(0)

skewguj + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档