ホームページ >バックエンド開発 >Python チュートリアル >マルチセットの一意の順列を効率的に生成するにはどうすればよいですか?

マルチセットの一意の順列を効率的に生成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-13 10:53:12835ブラウズ

How Can I Efficiently Generate Unique Permutations of a Multiset?

一意の順列のカウント

Itertools の順列関数は、要素を値ではなく位置によって一意であるものとして扱います。その結果、次の例のように重複が発生する可能性があります: [(1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1 、1, 1)、(1, 1, 1)].

を避ける重複

元のリクエストは、多数の順列が含まれるため、事後フィルタリングに頼ることなくこれらの重複を回避するアルゴリズムを求めていました。

sympy のマルチセット順列

そのような場合のために、sympy は multiset_permutations を提供しますイテレータ。順列とは異なり、この反復子は要素を位置ではなく値に基づいて一意なものとして扱います。

次の例を考えてみましょう:

>>> from sympy.utilities.iterables import multiset_permutations
>>> list(multiset_permutations([1,1,1]))
[[1, 1, 1]]
>>> list(multiset_permutations([1,1,2]))
[[1, 1, 2], [1, 2, 1], [2, 1, 1]]

ご覧のとおり、multiset_permutations は一意の順列のみを生成します。

以上がマルチセットの一意の順列を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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