算法分析与设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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写简单的程序,掌握了递归算法的基本原理。

相关文档
最新文档