2012-08-15 242 views
0

我正在研究一些我正在研究的研究的java代碼,並且需要有一種方法來迭代ArrayList的所有排列。我查看了以前在這裏提出的一些問題,但大多數並不是我想要做的,而那些接近的問題有處理字符串和用Perl編寫的示例代碼的答案,或者在似乎是一個實現的情況下喜歡它會工作......實際上並不工作。遍歷數組的排列

理想情況下,我正在尋找提示/代碼片段來幫助我編寫一個函數permute(list,i),當我從0到list.size()時!給我我的ArrayList的每個排列。

+0

n!變得非常快速。你的名單有多大? – GriffeyDog 2012-08-15 19:58:35

+0

當您談論排列時,字符串中的字符與列表中的節點之間沒有區別。 – 2012-08-15 20:00:31

+0

你是否嘗試谷歌'所有排列'alforithm?這實際上你需要 – maks 2012-08-15 20:01:46

回答

2

有一種從0到(n! - 1)的計數方式,它將列出n個元素列表的所有排列。這個想法是在使用factorial number system時重寫數字,並將數字解釋爲確定要使用哪種置換的編碼方式。如果您對此感到好奇,我有a C++ implementation of this algorithm。我也一次gave a talk關於這個,以防你想要的話題的一些視覺效果。

希望這會有所幫助!

+0

我通過演示文稿瀏覽了它,它更容易實現完整閱讀它的OP問題!也許你可以編輯你的答案,並給出一些關於演示文稿的小介紹,以及它如何幫助。看起來很有趣 – Cratylus 2012-08-15 20:07:21

+0

+1 - 這也是已知的作爲'排列映射' - 谷歌應該導致替代實現 – dfb 2012-08-15 20:08:24

2

如果遍歷所有排列對您來說已經足夠,請參閱此答案:Stepping through all permutations one swap at a time。 對於給定的n,迭代器產生數字0(n-1)的所有排列。 您可以簡單地將它包裝到另一個迭代器中,該迭代器將數字的排列轉換爲數組元素的排列。 (請注意,您不能只用迭代器中的int[]替換任意數組/列表,該算法需要使用數字。)

+0

謝謝。這應該做我需要的。 – 2012-08-15 23:11:37