Java 一种寻找包含可变元素数的可变数组排列的有效方法
可能重复:Java 一种寻找包含可变元素数的可变数组排列的有效方法,java,c,algorithm,permutation,combinations,Java,C,Algorithm,Permutation,Combinations,可能重复: 假设我有n个数组,其中的元素如下 a1 -> e11,e12,e13 a2 -> e21,e22,e23,e24,e25 a3 -> e31,e32 a4 -> e41,e42,e43,e44 ... an -> en1,en2,en3,en4,en5,en6 我想从上面的每个数组中得到所有可能的排列,其中包含n个元素 对于exm e11,e21,e31,e41.........,en1 e13,e25,e32,e41..
假设我有n个数组,其中的元素如下
a1 -> e11,e12,e13
a2 -> e21,e22,e23,e24,e25
a3 -> e31,e32
a4 -> e41,e42,e43,e44
...
an -> en1,en2,en3,en4,en5,en6
我想从上面的每个数组中得到所有可能的排列,其中包含n个元素
对于exm
e11,e21,e31,e41.........,en1
e13,e25,e32,e41.........,en6
等等
建议我一个有效的方法,如果可能的话,使用Java或C语言编写代码片段。您可以使用以下伪代码: 函数以获取下一个排列:
function NextPermutation(int[] current)
{
current[0] = current[0] + 1;
int pointer = 0;
while(pointer <= n && current[pointer] == limit[pointer])
{
current[pointer] = 0;
pointer = pointer + 1;
current[pointer] = current[pointer] + 1;
}
}
current
数组将索引包含到数组中a1、a2、,一个
,因为您对循环的所有数组组合都感兴趣,所以在这里非常好
下面是一个解决方案(应该针对语法进行修改以使其正常工作)
inti=0
int j=0
int k=0
而(iI)将递归地循环每个组合。这是简单而有效的。
int[] limit = new int[n + 2];
int[] current = new int[n + 2];
limit[1] = a1.length;
...
limit[n] = an.length;
while(current[n+1] == 0)
{
Print(current);
NextPermutation(current);
}
int i = 0
int j=0
int k =0
while(i<arraylength(a1))
{
while (j < arraylength(a2))
{
//and so till an
print a1[i],a2[j];
j++;
}
i++;
}