迭代数组的排列

时间:2012-08-15 19:55:02

标签: java algorithm permutation

我正在研究一些我正在进行的研究的java代码,并且需要有一种方法来迭代ArrayList的所有排列。我已经查看了之前提出的一些问题,但大多数问题都不是我想要做的,而那些关闭的问题的答案是处理用Perl编写的字符串和示例代码,或者是一个实现的问题。喜欢它会起作用......实际上不起作用。

理想情况下,我正在寻找提示/代码片段来帮助我编写函数permute(list,i),因为我从0到list.size()!给了我ArrayList的每个排列。

2 个答案:

答案 0 :(得分:3)

有一种从0到(n! - 1)计数的方法,它将列出n个元素列表的所有排列。我们的想法是在使用factorial number system时重写数字,并将数字解释为确定使用哪种排列的编码方式。如果您对此感到好奇,我有 a C++ implementation of this algorithm 。我还有一次 gave a talk ,如果你想要关于这个主题的一些视觉效果。

希望这有帮助!

答案 1 :(得分:2)

如果迭代所有排列对您来说已经足够了,请参阅以下答案:Stepping through all permutations one swap at a time。 对于给定的n,迭代器会生成数字0(n-1)的所有排列。 您可以简单地将其包装到另一个迭代器中,该迭代器将数字的排列转换为数组元素的排列。 (请注意,您不能仅使用任意数组/列表替换迭代器中的int[]。算法需要使用数字。)