(算法设计与分析的实验报告.docVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(算法设计与分析的实验报告

实验一 递归与分治策略 一、实验目的 1.加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2.提高学生利用课堂所学知识解决实际问题的能力; 3.提高学生综合应用所学知识解决实际问题的能力。 二、实验内容 1、 ①设a[0:n-1]是已排好序的数组。请写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。 ②写出三分搜索法的程序。 三、实验要求 (1)用分治法求解上面两个问题; (2)再选择自己熟悉的其它方法求解本问题; (3)上机实现所设计的所有算法; 四、实验过程设计(算法设计过程) 1、已知a[0:n-1]是一个已排好序的数组,可以采用折半查找(二分查找)算法。如果搜索元素在数组中,则直接返回下表即可;否则比较搜索元素x与通过二分查找所得最终元素的大小,注意边界条件,从而计算出小于x的最大元素的位置i和大于x的最小元素位置j。 2、将n个元素分成大致相同的三部分,取在数组a的左三分之一部分中继续搜索x。如果xa[2(n-1)/3],则只需在数组a的右三分之一部分中继续搜索x。上述两种情况不成立时,则在数组中间的三分之一部分中继续搜索x。 五、实验结果分析 二分搜索法: 三分搜索法: 时间复杂性: 二分搜索每次把搜索区域砍掉一半,很明显时间复杂度为O(log n)。(n代表集合中元素的个数)O(log3n)空间复杂度:O(1)#includeiostream.h #includestdio.h int binarySearch(int a[],int x,int n) { int left=0;int right=n-1;int i,j; while(left=right) { int middle=(left+right)/2; if(x==a[middle]){i=j=middle;return 1;} if(xa[middle])left=middle+1; else right=middle-1; } i=right;j=left; return 0; } int main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; int n=10; int x=9; if(binarySearch(a,x,n)) cout找到endl; else cout找不到endl; return 0; } 实验二 动态规划——求解最优问题 一、实验目的 1.加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2.提高学生利用课堂所学知识解决实际问题的能力; 3.提高学生综合应用所学知识解决实际问题的能力。 二、实验内容 1、用两台处理机A和B处理n作业。设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i]。i,有a[i]b[j]。既不能将一个作业分开由两台机器处理,也没有一台机器能同时处理2个作业。设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。研究一个实例2, 5, 7, 10, 5, 2); (b[1],b[2],b[3],b[4],b[5],b[6])= (3, 8, 4, 11, 3, 4)。 2、长江游艇俱乐部在长江上设置了n个游艇出租站1,2……n。游客可在游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金r(i,j)1=ij=n。设计一个算法,计算出游艇1到游艇n所需最少租金。 三、实验要求 (1)用动态规划思想求解最优问题; (2)再选择自己熟悉的程序设计语言实现所有算法; (3)分析所设计的算法的时间/空间复杂性。 四、实验过程设计(算法设计过程) 1、对于给定的2台处理机A和B处理n个作业,找出一个最优调度方案,使2台机器处理完这n个作业的时间最短。 2、对于给定的游艇出租站i到游艇出租站j之间的租金为r(i,j),1=ij=n,计算出游艇1到游艇n所需最少租金。 五、实验结果分析 独立任务最优调度问题: 租用游艇问题: 时间复杂性:独立任务最优调度问题:O(n*Sum) 六、实验体会 对于算法来说,没有最好,只有更好,算法的结果不一定是最佳答案,但至少是最接近最佳答案的。在权衡算法时间复杂度和空间复杂度的情况下,找到一个在时间和空间都能接受的算法才是上上之策。 七、附录:(源代码) 独立任务最优调度问题: using System; namespace zydd { class Prog

文档评论(0)

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

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

1亿VIP精品文档

相关文档