集合S = {1,2、...、n}内で順列p:S-> Sを見つけることに興味があります。特に、iとjを並べ替えるすべての関数:p(i)= jとp(j)= i; p(i)= iまたはp(j)= jとする。例えばすべての可能な順列関数を生成する
、もしS = {1,2,3}、Iのようなものを取得する必要:
p0 = [(1), (2), (3)] # p(1)=1, p(2)=2, p(3)=3
p1 = [(1,2), (3)] # p(1)=2, p(2)=1, p(3)=3
p2 = [(1,3), (2)]
p3 = [(2,3), (1)]
場合S = {1、2、3、4}:
p0 = [(1), (2), (3), (4)]
p1 = [(1,2), (3,4)]
p2 = [(1,2), (3), (4)] # p(1)=2, p(2)=1, p(3)=3, p(4)=4
p3 = [(1,3), (2,4)]
p4 = [(1,3), (2), (4)]
p5 = [(1,4), (2,3)]
p6 = [(1,4), (2), (3)]
p7 = [(1), (3), (2,4)]
p8 = [(1), (4), (2,3)]
p9 = [(1), (2), (3,4)]
を
ありがとうございます。
あなたは何を試してみましたか?あなたはitertoolsを意識しています。あなたがそれを知ったら、それをあなたのビルディングブロックに使用するのは難しくありません。 – ShadowRanger
私はそれほど多くの下降音があるとは思わない、それは*任意の*順列ではなくむしろそれらの特別なサブセットである。効率的な実装はややこしい。 – Kh40tiK
@ Kh40tiK:試みをしなくても助けを求めるのは、本当にSOの精神ではありません。 – ShadowRanger