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