2012-05-22 108 views
0

我有6個數組,每個數組有8個元素。我想寫揭示像所有陣列中的所有元素的所有可能組合的方法:找到六個數組元素的所有可能組合

firstArray firstElement, secondArray firstElement,.... sixthArray firstElement 

firstArray SECONDElement, secondArray firstElement,.... sixthArray firstElement 

.... etc... 

firstArray lastElement, secondArray lastElement,.... sixthArray lastElement 

我怎麼能做到這一點的最efficent方法是什麼? (最性能friendly-的方式?)

for (int i = 0; i < A.length; i++) { 
    for (int j = 0; j < B.length; j++) { 
    for (int h = 0; h < C.length; h++) { 
     for (int k = 0; k < D.length; k++) { 
     for (int l = 0; l < E.length; l++) { 
      for (int n = 0; n < F.length; n++) { 
      System.out.println(A[i] + " " 
          + B[j] + " " 
          + C[h] + " " 
          + D[k] + " " 
          + E[l] + " " 
          + F[n]); 
      } 
     } 
     } 
    } 
    } 
} 
+0

看枚舉可能的組合,並使用indeces查找數組中的元素 – maress

+0

你能詳細說明更多...與例 – Imposter

+0

我不能格式化的例子,所以很抱歉下面的醜陋格式:而不是我想要的東西更有效 –

回答

4

最簡單的代碼將是 -

for(first array a){ 
    for(second array b){ 
     for(third array c){ 
     for(fourth array d){ 
      for(fifth array e){ 
       for(sixth array f){ 
        System.out.println(a[], b[], c[], d[], e[], f[]); 
       } 
      } 
      } 
     } 
    } 
    } 

這不是良好的性能明智的,因爲它需要 - 沒有。數組*每個數組的元素*每個數組時間的元素*

+0

是的,這六個for循環看起來很邪惡,當談到性能。不管怎麼說 –

3

這很快成爲一個常見問題解答,但對於我的生活,我找不到正確的問題,這是一個重複的,所以這裏是FPA(經常提供的答案)。

從000000到777777依次生成所有6位數的基數爲8的數字。每個數字指定你正在尋找的其中一組:第一個數字表示第一個數組的元素,第二個數字表示第二個數組的元素,等等。

這應該足以讓你開始,任何'幫助'我提供的Java會被嘲笑。這是否比你已有的答案要好(或者實際上與它有很大不同),我讓你和其他人去評判。

爲了您將來的參考,您正試圖計算您的6個陣列的笛卡爾積。至於這些方法的效率,精確計算n個元素中每個元素的笛卡爾乘積是O(n^2),並且沒有通過巧妙的編程來避免這種情況。因此,對於6組,n個元素中的每一個,計算複雜度將是O(n^6)。

+0

謝謝,我有這個解決方案,但我正在尋找一個shotcut,以某種方式通過巧妙的編程「加快」了這個過程,因爲這可能(也許會)運行很長時間,因爲我必須經常調用這個方法 –

+0

可能這是我的錯誤,我把「蠻力」這個詞當作標籤,這可能是誤導性的。 –

+0

計算複雜度爲O(n^6)的東西的快速方法是不計算它,而是在第一次計算結果時存儲結果。這是否適用於您的情況以及如何適用您的情況適合您。 –