ホームページ >Java >&#&チュートリアル >Javaで複数のセットのデカルト積を効率的に計算するにはどうすればよいですか?
Java では、2 つ以上のセットのデカルト積を計算するのが一般的な操作です。これには、入力セットからの要素の可能なすべての組み合わせを含む新しいセットの生成が含まれます。
ネストされたループを使用する従来のアプローチは、任意の数のセットを扱う場合に煩雑になる可能性があります。代わりに、再帰的アプローチを検討してください。
public static Set<Set<Object>> cartesianProduct(Set<?>... sets) { if (sets.length < 2) throw new IllegalArgumentException("Can't have a product of fewer than two sets (got " + sets.length + ")"); return _cartesianProduct(0, sets); } private static Set<Set<Object>> _cartesianProduct(int index, Set<?>... sets) { Set<Set<Object>> ret = new HashSet<>(); if (index == sets.length) { ret.add(new HashSet<>()); } else { for (Object obj : sets[index]) { for (Set<Object> set : _cartesianProduct(index + 1, sets)) { set.add(obj); ret.add(set); } } } return ret; }
この再帰的実装では、Java のジェネリック パラメータ システムの制限によりジェネリック型情報が失われることに注意してください。型情報を保持するには、Triple など、関係するセットの数に応じて特定のタプル クラスを定義することを検討してください。 3セット分。ただし、このアプローチは、任意の数のセットに対しては実用的ではありません。
以上がJavaで複数のセットのデカルト積を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。