ホームページ  >  記事  >  バックエンド開発  >  Python でセットを可能なすべてのサブセットに分割するにはどうすればよいでしょうか?

Python でセットを可能なすべてのサブセットに分割するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-11-07 16:43:03817ブラウズ

How Can You Partition a Set Into All Its Possible Subsets in Python?

Python でのセットの分割

当面のタスクは、指定された要素セットをすべての可能なサブセットに分割することです。たとえば、セット [1, 2, 3] を分割すると、次のサブセットが得られます。

[[1], [2], [3]]
[[1,2], [3]]
[[1], [2,3]]
[[1,3], [2]]
[[1,2,3]]

再帰的解決策

この問題に対する 1 つのアプローチは再帰です。 n-1 個の要素のパーティションを指定すると、既存のサブセットの 1 つに n 番目の要素を含めるか、n 番目の要素のみを含む新しいシングルトン サブセットを作成することで、n 番目の要素のパーティションを作成するように拡張できます。

この再帰アルゴリズムは、出力の重複や外部ライブラリへの不要な依存関係を回避しながら、入力セットを効果的に分割します:

<code class="python">def partition(collection):
    if len(collection) == 1:
        yield [ collection ]
        return

    first = collection[0]
    for smaller in partition(collection[1:]):
        # insert `first` in each of the subpartition's subsets
        for n, subset in enumerate(smaller):
            yield smaller[:n] + [[ first ] + subset]  + smaller[n+1:]
        # put `first` in its own subset 
        yield [ [ first ] ] + smaller

something = list(range(1,5))

for n, p in enumerate(partition(something), 1):
    print(n, sorted(p))</code>

以上がPython でセットを可能なすべてのサブセットに分割するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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