如何实现这个算法?(算法设计与分析 书中的题)

来源:百度知道 编辑:UC知道 时间:2024/05/26 07:11:03
排列问题
设R={r1,r2,...,rn}(r后面是下标)是要进行排列的n个元素,Ri=R-{ri}。集合X中元素的全排列记为perm(X)。(ri)perm(X)表示在全排列perm(x)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳定义如下:

当n=1时,perm(R)=(r),其中r是集合中唯一的元素;
当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),...(rn)perm(Rn)构成。

由此递归定义,可设计产生perm(R)的递归算法如下:

public static int perm(Object[]list,int k,int m)
{//产生list[k: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.swap(list,k,i);
perm(list,k+1,m);
MyMath.swap(list,k,i);
}
}

具体暂时还不会实现,不知道,这个MyMath.swap 怎么处理??请高人补充~

不太懂算法,不过swap在程序里通常指数组或集合中两个元素的交换
就像这样:
public static void swap(Object[] list, int m, int n) {
Object temp = list[m];
list[m] = list[n];
lsit[n] = temp;
}