如何实现这个算法?(算法设计与分析 书中的题)设R={r1,r2,...,rn}(r后面是下标)是要进行排列的n个元素,Ri=R-{ri}.集合X中元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(x)的每

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 07:26:53

如何实现这个算法?(算法设计与分析 书中的题)设R={r1,r2,...,rn}(r后面是下标)是要进行排列的n个元素,Ri=R-{ri}.集合X中元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(x)的每
如何实现这个算法?(算法设计与分析 书中的题)
设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

如何实现这个算法?(算法设计与分析 书中的题)设R={r1,r2,...,rn}(r后面是下标)是要进行排列的n个元素,Ri=R-{ri}.集合X中元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(x)的每
不太懂算法,不过swap在程序里通常指数组或集合中两个元素的交换
就像这样:
public static void swap(Object[] list, int m, int n) {
Object temp = list[m];
list[m] = list[n];
lsit[n] = temp;
}