我正在研究一些我正在研究的研究的java代码,并且需要有一种方法来迭代ArrayList的所有排列。我查看了以前在这里提出的一些问题,但大多数并不是我想要做的,而那些接近的问题有处理字符串和用Perl编写的示例代码的答案,或者在似乎是一个实现的情况下喜欢它会工作......实际上并不工作。遍历数组的排列
理想情况下,我正在寻找提示/代码片段来帮助我编写一个函数permute(list,i),当我从0到list.size()时!给我我的ArrayList的每个排列。
我正在研究一些我正在研究的研究的java代码,并且需要有一种方法来迭代ArrayList的所有排列。我查看了以前在这里提出的一些问题,但大多数并不是我想要做的,而那些接近的问题有处理字符串和用Perl编写的示例代码的答案,或者在似乎是一个实现的情况下喜欢它会工作......实际上并不工作。遍历数组的排列
理想情况下,我正在寻找提示/代码片段来帮助我编写一个函数permute(list,i),当我从0到list.size()时!给我我的ArrayList的每个排列。
有一种从0到(n! - 1)的计数方式,它将列出n个元素列表的所有排列。这个想法是在使用factorial number system时重写数字,并将数字解释为确定要使用哪种置换的编码方式。如果您对此感到好奇,我有a C++ implementation of this algorithm。我也一次gave a talk关于这个,以防你想要的话题的一些视觉效果。
希望这会有所帮助!
如果遍历所有排列对您来说已经足够,请参阅此答案:Stepping through all permutations one swap at a time。 对于给定的n
,迭代器产生数字0
到(n-1)
的所有排列。 您可以简单地将它包装到另一个迭代器中,该迭代器将数字的排列转换为数组元素的排列。 (请注意,您不能只用迭代器中的int[]
替换任意数组/列表,该算法需要使用数字。)
谢谢。这应该做我需要的。 – 2012-08-15 23:11:37
n!变得非常快速。你的名单有多大? – GriffeyDog 2012-08-15 19:58:35
当您谈论排列时,字符串中的字符与列表中的节点之间没有区别。 – 2012-08-15 20:00:31
你是否尝试谷歌'所有排列'alforithm?这实际上你需要 – maks 2012-08-15 20:01:46