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 桁の 8 進数を順番に生成します。各数値は、探しているセットの 1 つを指定します。最初の桁は最初の配列の要素を識別し、2 番目の桁は 2 番目の配列の要素を識別します。

Java で私が提供した「ヘルプ」は笑われるでしょう。これがあなたがすでに持っている答えよりも優れているかどうか(または実際には、それとは大幅に異なるかどうか)、私はあなたと他の人に判断を委ねます.

今後の参考のために、6 つの配列のデカルト積を計算しようとしています。これらのアプローチの効率に関しては、n 個の要素のそれぞれの 2 セットのデカルト積を適切に計算すると O(n^2) になり、巧妙なプログラミングによってそれを回避することはできません。したがって、6 セットの場合、n 個の要素のそれぞれについて、計算の複雑さは O(n^6) になります。

于 2012-05-22T08:38:51.663 に答える