我正在研究一些我正在研究的研究的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