算法分析与设计_第1页
算法分析与设计_第2页
算法分析与设计_第3页
算法分析与设计_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 算法设计与分析课程实验报告专 业: 班 级: 学 号: 姓 名: 日期: 2014年 11月 10日一、 实验题目熟悉环境和递归算法二、 实验目的(1)熟悉Java上机环境;(2)基本掌握递归算法的原理方法.三、 实验内容1、将正整数n表示成一系列正整数之和:n=n1+n2+nk,其中n1n2nk1,k1。正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。2、设计一个递归算法生成n个元素r1,r2,rn的全排列。3、Hanoi塔问题设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,n,现要求将塔座a上的

2、圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则1:每次只能移动1个圆盘; 规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则3:在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。四、 实验步骤 (一) 正整数划分问题 (1)、问题分析 在正整数n的不同划分中,将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递归关系。1、q(n,1)=1,n>=1。当最大加数n1不大于1时,任何正整数n只有一种划分形式,即。2、q(n,m)=q(n,n),m>=n。最大加数n1实际上不能大于n,因此,q(1,m)=

3、1。3、q(n,n)=1+q(n,n-1)。正整数n的划分由n1=n的划分和n1<=n-1的划分组成。4、q(n,m)= q(n,m-1)+q(n-m,m),n>m>1。正整数n的最大加数n1不大于m的划分由n1=m的划分和n1<=m-1的划分组成。(2)、算法描述public class 张萌 /* * param args */public static void main(String args) / TODO Auto-generated method stub System.out.println(q(2,2);public static int q(int

4、n,int m)if(n<1)|(m<1) return 0;if(n=1)|(m=1) return 1;if(n<m) return q(n,n);if(n=m) return q(n,m-1)+1;return q(n,m-1)+q(n-m,m); (3) 、运行结果(二)n个元素全排列问题(1)、问题分析 设R=r1,r2,rn是要进行排列的n个元素,Ri=Rri。集合X中元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(X)每一个排列前加上前缀ri,得到的排列。R的全排列可归纳定义为如下:当n=1时,perm(R)=(r),其中r是集合R中

5、唯一的元素;当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R1),(rn)quan(Rn)构成。(2)、算法描述public class 张萌 /* * param args */public static void main(String args) / TODO Auto-generated method stub String list="a","b","c","d" perm(list,0,list.length-1);public static void perm(Obje

6、ctlist,int k,int m)if(k=m)for(int i=0;i<=m;i+)System.out.print(listi);System.out.println();elsefor(int i=k;i<=m;i+)MyMath.swap(list,k,i);perm(list,k+1,m);MyMath.swap(list,k,i);public static class MyMathpublic static void swap(Object list, int k, int i) / TODO Auto-generated method stubObject t

7、;t=listk;listk=listi;listi=t; (3)、运行结果 (三)汉诺塔问题(1)、问题分析 当n=1时,只要将编号为1的圆盘从塔座a直接移至b座上即可。当n>1时,需要利用塔座c作为辅助塔座。此时若能设法将n-1个较小的圆盘依照移动规则从塔座a移至塔座c,然后,将剩下的最大圆盘从塔座a移至b,最后,再设法将n-1个较小的圆盘依照移动规则从塔座c移至塔座b。由此可见,n个圆盘的移动问题可以分为两次n-1个圆盘移动的问题,这又可以递归地用上述方法来做。 (2)、算法描述public class 张萌 /* * param args */public static void main(String args) / TODO Auto-generated method stubhanoi(4,'a','b','c');public static void hanoi(int n,int a,int b,int c) if (n>0) hanoi(n-1,a,c,b); move(a,b); hanoi(n-1,c,b,a); private static void mo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论