順列を生成することに関する記事は多数ありますが、私は、ちょっと違う順列のアルゴリズム的な必要性があります。反復せずにペアのすべての順列を生成するアルゴリズム
要素の集合(a、b、c、.. n)が与えられた場合、要素の任意の組み合わせで(ab)、(cd)、(ef) ペア(ab)と(ba)は同じです。 また、必要な順列は、順番にのみ異なるものであってはならない:(ab)、(ef)、(cd)は(ef)、(cd)、(ab)と同一である。
例として、 6つの要素a、b、c、d、e、fの順列の完全なリスト
これは、私はアルゴリズムが生成したいペアのリストである:
(ab), (cd), (ef)
(ab), (ce), (df)
(ab), (cf), (de)
(ac), (bd), (ef)
(ac), (be), (df)
(ac), (bf), (de)
(ad), (bc), (ef)
(ad), (be), (cf)
(ad), (bf), (ce)
(ae), (bc), (df)
(ae), (bd), (cf)
(ae), (bf), (cd)
(af), (bc), (de)
(af), (bd), (ce)
(af), (be), (cd)
Iは4対(8つの要素)のためのアルゴリズムを想像しようとしたが、私はできませんでした。
典型的な解決策は、すべての行が要素aで始まることです。他の開始要素は、(ab)が(ba)と(cd)、(ab)が(ab)、(cd)に等しいという2つの規則と競合する可能性があります。だから、要素aですべてを始めることが重複を避ける最も簡単な方法です。
私はクヌスの答えを見つけようとしましたが、私はあまりにも数学者ではありません。順列と組み合わせの章で与えられているこのような特定の運動を100ほど見つけることができません。それはおそらくそこにあるが、私が見つけ出すのではない。
ここで誰かが私に良いアルゴリズム(パスカルまたはC言語であることが望ましい)を表示したいと考えています。
http://stackoverflow.com/questions/32493769/sets-of-all-disjoint-pairs/32494810#32494810 – MBo
最初の要素とそれに続くすべての要素を(ループを使用して)結合し、次に各ペアa、x)は残りの集合と再帰する – m69