算法设计与分析案例.docxVIP

  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++环境及递归算法(4学时) 一、 实验目的与要求 1、 熟悉C/C++语言的集成开发环境; 2、 通过本实验加深对递归过程的理解 二、 实验内容: 掌握递归算法的概念和基本思想,分析并掌握排列问题的递归算法和Hanoi塔问题的递 归算法。 三、 实验题 1、 设计一个递归算法生成n个元素{rl,r2,...,rn}W全排列。任意输入一串整数或字符, 输出结果能够用递归方法实现整数或字符的全排列。 2、 设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上, 由大到小地叠在一起。各圆盘从小到大编号为l,2,...,n,现要求将塔座a上的这一叠圆盘 移到塔座b上,并仍按同样顺序叠置。 四、 实验步骤 理解算法思想和问题要求; 编程实现题目要求; 上机输入和调试口己所编的程序; 验证分析实验结果; 整理出实验报告。 实验提不 1、#include iostream.h inline void swap(int a,int b) { int temp=a; a=b; b=temp; } void perm(int list[]jnt kjnt m) { if(k==m) { for(int i=0;i=m;i++) cout?list[i]; cout?endl; } else for(int i=k;iv=m;i++) { swap(list[k],list[i]); perm(list,k+l,m); swap(list[k]Jist[i]); } } void main() { int list[3]={ 1,2,3}; perm(list,0,2); } 2、void hanoi(int n, int a, int b, int c) { if (n 0) { hanoi(n-l, a, c, b); move(a,b); hanoi(n-l5 c, b, a); 实验二分治算法(4学时) 一、 实验目的与要求 1、 熟悉二分搜索算法和快速排序算法; 2、 初步掌握分治算法; 二、 实验题 1、 设a[O:n?l]是一个己排好序的数组。请改写二分搜索算法,使得当搜索元索x不在数组中 时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,I 和j相同,均为x在数组中的位置。设有n个不同的整数排好序厉存放于t[O:n-ll中,若存 在一个下标i, OWiVn,使得设计一个有效的算法找到这个下标。要求算法在最坏 的情况下的计算时间为O (logn)o 2、 在快速排序中,记录的比较和交换是从两端向中间进行的,关键字较大的记录一次就能 交换到后面单?元,关键字较小的记录一次就能交换到两面小元,记录每次移动的距离较大, 因而总的比较和移动次数较少。 三、 实验提不 1、用I,j做参数,口采用传递引用或指针的形式带回值。 bool BinarySearch(int a[],int n,int x,int i,int j) { int left=O; int right=n-l; while(leftright) { int mid=(left+right)/2; if(x==a[mid]) { i=j=mid; return true; } if(xa[mid]) left=mid+l; else right二mid-1; } i=right; j=left; return false; } int SearchTag(int a[]3nt n,int x) int left=O; int right=n-l; while(leftright) { int mid=(left+right)/2; if(x==a[mid]) return mid; if(xa[mid]) right=mid-l; else left=mid+l; } return -1; } 2、 templateclass Type void Quicksort (Type a[], int p, ini r) { if(Pr) { int q=Partition(a,p,r); Quicksort (a,p,q-l); //对左半段排序 Quicksort (a,q+l,r); //对右半段排序 templateclass Typo int Partition (Type af], int p, int r) { int i = p, j = r + 1; Type x=a[p]; //将vx的元索交换到左边区域 //将乂的元素交换到右边区域 while (true) { while (a[++i] x); while (a[- -j] x); if (i = j) break; Swap(a[i]

文档评论(0)

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

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

1亿VIP精品文档

相关文档