0
儘管有大量關於生成排列的文章,但我對排列的算法需求稍有不同。給定一組元素(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)
我試圖設想的算法4對(8種元素),但我不能。
解決方案的典型代表是,所有行都以元素a開頭。 (ab)等於(ba)和(cd),(ab)等於(ab),(cd)的兩個規則會產生衝突。所以用元素a開始是避免重複的最簡單方法。
我試圖找到與Knuth的答案,但我太少的數學家能夠找到這個特殊的練習,在排列和組合的章節給出的100左右。它可能在那裏,但不適合我找。
希望這裏的某個人能夠給我一個很好的算法(最好用帕斯卡或C語言)。
http://stackoverflow.com/questions/32493769/sets-of-all-disjoint-pairs/32494810#32494810 – MBo
將第一個元素與其後的所有元素相結合(使用循環),然後對每個元素( a,x)與該組的其餘部分一起遞歸 – m69