找到六个数组元素的所有可能组合

时间:2012-05-22 08:21:57

标签: java algorithm brute-force

我有6个数组,每个数组有8个元素。我想写一个方法,揭示所有数组的所有元素的所有可能组合,如:

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

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

.... etc...

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

我怎样才能以最高效的方式做到这一点? (性能最友好的方式?)

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]); 
          } 
        }  
      } 
    }  
  }  
}

2 个答案:

答案 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[]);
                 }
             }
          }
       }
     }
  }

这不是很好的表现,因为它需要 - 不。每个数组的数组*元素*每个数组时间的元素。

答案 1 :(得分:3)

这很快成为了常见问题解答,但对于我的生活,我找不到正确的问题,这是重复的,所以这里是FPA(经常提供的答案)。

依次从000000到777777生成所有6位数的基数为8的数字。每个数字指定您要查找的一个集合:第一个数字标识第一个数组的元素,第二个数字标识第二个数组的元素,等等。

这应该足以让你入门,我用Java提供的任何“帮助”都会被嘲笑。这是否比你已经拥有的答案更好(或者实际上与它有实质性的不同),我会让你和其他人去判断。

为了将来参考,您正在尝试计算6个阵列的笛卡尔积。至于这些方法的效率,很好地计算n个元素中的每一个的2个笛卡尔乘积是O(n ^ 2)并且通过巧妙的编程没有解决这个问题。因此,对于6组,n个元素中的每一个,计算复杂度将为O(n ^ 6)。