算法分析与设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业:
班级:
学号:
姓名:
日期: 2014年 11月 10日
48476Λn n 111+++=。
2、q(n ,m)=q(n ,n),m>=n 。
最大加数n1实际上不能大于n ,因此,q(1,m)=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 n,int m)
{ if ((n<1)||(m<1)) return 0;
if ((n==1)||(m==1)) return 1; if (n } } (3)、运行结果 (二)n 个元素全排列问题 (1)、问题分析 设R={r1,r2,……,rn}是要进行排列的n 个元素,Ri=R —{ri}。集合X 中元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(X)每一个排列前加上前缀ri ,得到的排列。R 的全排列可归纳定义为如下: 当n=1时,perm (R )=(r ),其中r 是集合R 中唯一的元素; 当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(Object[]list,int k,int m) { if(k==m) { for(int i=0;i<=m;i++) System.out.print(list[i]); System.out.println(); } else for(int i=k;i<=m;i++) { MyMath.s); perm(list,k+1,m); MyMath.s); } } public static class MyMath { public static void s[] list, int k, int i) { // TODO Auto-generated method stub Object t; t=list[k]; list[k]=list[i]; list[i]=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 stub hanoi(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 move(int a, int b) { System.out.println(a+"-->"+b); } }(3)、运行结果 五、出现的问题及解决的方法 通过这次实验,我学会了利用Java写简单的程序,掌握了递归算法的基本原理。