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

《算法分析与设计》 实验指导书 《算法分析与设计》课程是计算机专业的一门必修课程。开设算法分析与设计实验,目的就是为了使学生消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。 《算法分析与设计》课程实验的目的:是为了使学生在课程学习的同时,通过实验环境中的实际操作,对部分算法的具体应用有一个初步的了解,使学生加深了解和更好地掌握《算法分析与设计》课程教学大纲要求的内容。 《算法分析与设计》课程实验的注意事项:在《算法分析与设计》的课程实验过程中,要求学生做到: 预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现的情况提前作出思考和分析。 认真书写实验报告。实验报告包括实验目的和要求,实验情况及其分析。 遵守机房纪律,服从辅导教师指挥,爱护实验设备。 实验课程不迟到。如有事不能出席,所缺实验一般不补。 《算法分析与设计》课程实验的验收:实验的验收将分为两个部分。第一部分是上机操作,包括检查程序运行和即时提问。第二部分是提交电子的实验报告。 实验一 算法实现一 实验目的与要求 熟悉C/C++语言的集成开发环境; 通过本实验加深对分治法、贪心算法的理解。 实验内容: 掌握分治法、贪心算法的概念和基本思想,并结合具体的问题学习如何用相应策略进行求解的方法。 实验题 1. 【伪造硬币问题】给你一个装有n个硬币的袋子。n个硬币中有一个是伪造的。你的任务是找出这个伪造的硬币。为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。试用分治法的思想写出解决问题的算法,并计算其时间复杂度。 2.【找零钱问题】一个小孩买了价值为33美分的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目有限的面值为25美分、10美分、5美分、及1美分的硬币。给出一种找零钱的贪心算法。 实验步骤 理解算法思想和问题要求; 编程实现题目要求; 上机输入和调试自己所编的程序; 验证分析实验结果; 整理出实验报告。 实验程序 实验结果 实验分析 1本实验运用分治算法。可将硬币分成N堆来进行实验 若分成两堆算法思想如下 步骤一、令x等于n. 步骤二、若x为偶数, 则将袋子中的硬币一分为二,即各x/2个放仪器上比较两组硬币的重量,那组较轻伪造的硬币就在该组。若n等于2,则结束,因为已经找出伪造硬币。否则,令n=n/2,执行步骤一。 否则, 取出一个硬币后,再把剩下的x-1个硬币进行分组,每组(x-1)/2个硬币;并放在仪器上比较两组的重量,若两组一样重,则刚才拿出来的硬币为伪造的;否则,伪造的硬币在较轻的那一组。若n等于2,则结束,因为已经找出伪造硬币。否则,令n=(x-1)/2,执行步骤一。 时间复杂度。因为以上算法应用的是二分法的思想,每次比较排除1/2的真硬币。所以其时间复杂度为O(n)。 分成三堆思想 /*总体思想:将所有的硬币分成三堆,通过比较三堆的质量找出与其他两组不同的一组,伪造的硬币一定在这一组中。写程序时还须注意硬币号 所以一共有三种可能性: 1.硬币刚好能分成三堆,即硬币的数目能被3整除。这样只需要比较哪堆硬币质量和其他的两组质量不一样,不一样的那组是有伪造硬币的那组。 2.硬币的数目被3整除余1。再将这一种情况分成两种情况考虑: a.三组硬币质量相等,则剩下的硬币是伪造的。 b.三组硬币质量不等,则情况与1一致。 3.硬币数目被3整除余2。也将这一种情况分成两种情况考虑: a.三组硬币质量相等,则伪造的硬币一定在剩下的两个硬币当中。从三组硬币中任意取出一个与剩下的两个硬币比较质量,则质量与其他两个不相等的硬币是伪造的。 b.三组硬币质量不等,则情况与1一致。*/ 实验程序如下 #include iostream #include stdlib.h using namespace std; void findTheCoin(int a[], int n ,int num); //找硬币函数的声明 int quantity(int q[],int n ); // 计算硬币质量函数的声明 void main() { const int n=70; //定义硬币的总数是70枚 int q[n]; //定义硬币数组 int i; for( i=0;in;i++) { q[i]=1; } //给硬币的重量赋值,正常的硬币的重量是1 q[4]=0; //定义第4枚硬币是伪造的,质量是0 findT

文档评论(0)

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

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

1亿VIP精品文档

相关文档