ホームページ >Java >&#&チュートリアル >Javaで任意の数のセットのデカルト積を計算するにはどうすればよいですか?

Javaで任意の数のセットのデカルト積を計算するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-12 15:41:10367ブラウズ

How to Compute the Cartesian Product of an Arbitrary Number of Sets in Java?

Java での任意の数のセットのデカルト積

複数のセットを扱う場合、一般的な操作はデカルト積を計算し、可能なすべてを含むセットを生成します。入力セットからの要素の組み合わせ。 Java でこれを容易にするために、任意の数のセットを処理するソリューションを検討してみましょう。

デカルト積の再帰的アプローチ

次の再帰的な Java メソッドである cartesianProduct は、次の計算を行います。任意の数の集合のデカルト積:

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

再帰ヘルパー メソッド _cartesianProduct は、各セットの要素を累積セットに繰り返し追加することによってデカルト積を構築します。

private static Set<Set<Object>> _cartesianProduct(int index, Set<?>... sets) {
    Set<Set<Object>> ret = new HashSet<Set<Object>>();
    if (index == sets.length) {
        ret.add(new HashSet<Object>());
    } else {
        for (Object obj : sets[index]) {
            for (Set<Object> set : _cartesianProduct(index + 1, sets)) {
                set.add(obj);
                ret.add(set);
            }
        }
    }
    return ret;
}

使用例

の使用法を示します。このメソッドでは、質問に示されている例を考えてみましょう。ここには、クラス person、 Gift、および GiftExtension のオブジェクトを含む 3 つのセットがあります。これらのセットのデカルト積は次のように取得できます。

Set<Person> persons = ...;
Set<Gift> gifts = ...;
Set<GiftExtension> giftExtensions = ...;

Set<Set<Object>> cartesianProduct = cartesianProduct(persons, gifts, giftExtensions);

結果のデカルト積には、人物、ギフト、ギフト拡張子のすべての可能な組み合わせを表すセットが含まれます。

Generic型情報

Java の型システムではメソッドが返すことを許可していないことに注意することが重要です。任意の数のパラメータを持つジェネリック型。これは、入力セット内の要素のタイプに関係なく、cartesianProduct メソッドが Set> を返すことを意味します。

以上がJavaで任意の数のセットのデカルト積を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。