是否有任何有效的方法可以将{1, ... , 2*n}
集的所有分部列入n
对?
最简单的想法是列出所有排列,然后排列(a1, a2, ... , a8)
表示除{{a1,a2}, ... , {a7,a8}}
。在这种情况下,每个部门都有2^n * n!
个排列。这是O((2n)!)
。
我能找到更有效的方法吗?
答案 0 :(得分:0)
这是我的铅笔和纸算法:
f(set,result):
if the set is empty:
return result
otherwise:
pair one item from the set with
each of the remaining items,
calling f again with the pair added to
the result and out of the set
123456
12 34 56
35 46
36 45
13 24 56
25 46
26 45
14 23 56
25 36
26 35
...