2017-07-02 2 views
-4

私は配列の異なる順列を含む問題を解決しようとしています。監視対象の配列が条件と一致するかどうかをチェックする関数が必要ですが、そうでない場合はチェックするために新しい順列を生成します。私はこれがwhile文を含んでいると思うので、私の質問は、各反復時に一意の(重複を避けるためにランダムではない)置換を生成するアルゴリズムを作成する方法にますます重なっています。制約は存在します。配列には少なくとも2つ以上の要素が含まれます。さらに、条件が順列と一致しない場合、戻り値はFalseでなければなりません。これまでのコードはありません。まだ私が納得したいアルゴリズムを思い付くことはできません。どんな考えが役に立つでしょう。Python:Combinations

+0

スタックオーバーフローはあなたの宿題をするためにここにはありません。あなたは本当に助けを求めるために来る前に、あなた自身に少なくとも少しの努力を払うべきです。例えば、 "python permutations"を検索すると、標準ライブラリの 'itertools'モジュールにあなたの順列を生成する関数があることがすぐに分かります。 – Blckknght

+0

@Blckknghtご回答ありがとうございますが、私は宿題のために来ていません。私はすべての順列を印刷したり、それを生成したりするつもりはありません。私は、新しい順列を得るために、反復ごとに配列を変更する必要があります。 itertoolsでそれを行う方法がある場合は、詳細を教えてください? –

+0

'itertools'のすべての関数と同様に、' itertools.permutations'関数は遅延イテレータオブジェクトを返します。イテレータは、入力反復の各順列を生成します。あなたが受け入れ可能な順列を早く見つけたら、あなたはループから脱出することができ、他の順列は生成されません。 – Blckknght

答えて

0

なぜ車輪を改造する必要がありますか?あなたはPythonをタグ付けしているので、このような便利なことを行うのに役立つライブラリがたくさんあることを知っておくべきです。あなたは、あなたが順列を生成するためのJohnson-Trotter Algorithmについて学ぶ必要があり、アルゴリズムを自分で書く必要がある場合は

>>> from itertools import permutations 
>>> x = [1, 2, 3, 4, 5, 6] 
>>> for p in permutations(x): 
...  print(p) 
... 
(1, 2, 3) 
(1, 3, 2) 
(2, 1, 3) 
(2, 3, 1) 
(3, 1, 2) 
(3, 2, 1) 

:そのようなライブラリーは、より具体的には、itertools.permutations機能itertoolsです。これは非常に直感的で、O(n!)時に順列を生成します。