资源描述:
《计算机算法设计与分析实验指导书》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机算法设计与分析实验指导书本书是为配合《算法分析与设计实验教学大纲》而编写的上机指导,其目的是使学生消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。上机实验一般应包括以下几个步骤:(1)、准备好上机所需的程序。手编程序应书写整齐,并经人工检查无误后才能上机。(2)、上机输入和调试自己所编的程序。一人一组,独立上机调试,上机时出现的问题,最好独立解决。(3)、上机结束后,整理出实验报告。实验报告应包括:题目、程序清单、运行结果、对运行情况所
2、作的分析。本书共分阶段8个实验,其具体要求和步骤如下:实验一java环境及递归算法(2学时)一、实验目的与要求1、熟悉java语言的集成开发环境;2、通过本实验加深对递归过程的理解二、实验内容:掌握递归算法的概念和基本思想,分析并掌握排列问题的递归算法和Hanoi塔问题的递归算法三、实验题1、设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。任意输入一串整数或字符,输出结果能够用递归方法实现整数或字符的全排列。2、设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆eh盘
3、从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。四、实验步骤1.理解算法思想和问题要求;2.编程实现题目要求;3.上机输入和调试自己所编的程序;4.验证分析实验结果;5.整理出实验报告。实验提示1、Publicstaticvoidswap(int&a,int&b){inttemp=a;a=b;b=temp;}voidperm(intlist[],intk,intm){if(k==m){for(inti=0;i<=m;i++)System.out..print(list[i]);System
4、.out..print();}elsefor(inti=k;i<=m;i++){Mymath.swap(list[k],list[i]);perm(list,k+1,m);Mymath.swap(list[k],list[i]);}}voidmain(){intlist[3]={1,2,3};perm(list,0,2);}2、pubicstaticvoidhanoi(intn,inta,intb,intc){if(n>0){hanoi(n-1,a,c,b);move(a,b);hanoi(n-1,c,b,a);}}实验二分治算法(
5、2学时)一、实验目的与要求1、熟悉二分搜索算法和快速排序算法;2、初步掌握分治算法;二、实验题1、设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,I和j相同,均为x在数组中的位置。设有n个不同的整数排好序后存放于t[0:n-1]中,若存在一个下标i,0≤i<n,使得t[i]=i,设计一个有效的算法找到这个下标。要求算法在最坏的情况下的计算时间为O(logn)。2、在快速排序中,记录的比较和交换是从两端向中间进行的,关
6、键字较大的记录一次就能交换到后面单元,关键字较小的记录一次就能交换到前面单元,记录每次移动的距离较大,因而总的比较和移动次数较少。三、实验提示1、用I,j做参数,且采用传递引用或指针的形式带回值。boolBinarySearch(inta[],intn,intx,int&i,int&j){ intleft=0; intright=n-1; while(left7、 returntrue; } if(x>a[mid]) left=mid+1; else right=mid-1; } i=right; j=left; returnfalse;} intSearchTag(inta[],intn,intx){ intleft=0; intright=n-1; while(left8、returnmid; if(x>a[mid]) right=mid-1; else left=mid+1; } return-1;} 2、template