0

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

2 回答 2

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

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

于 2012-05-22T08:28:54.473 回答
3

这正在迅速成为一个 SO FAQ,但是对于我的生活,我找不到与之重复的正确问题,所以这里是 FPA(经常提供的答案)。

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

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

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

于 2012-05-22T08:38:51.663 回答