是否有任何算法可以在小于 O(n!) 的时间内解决以下问题,例如多项式时间?否则,对于这个问题,没有人发现任何多项式时间算法,例如NP问题吗?
输入:n(元素数)
输出:两个所有组合的列表,其中,从列表顶部开始,每个 n/2 组合单元必须具有所有元素。
示例 1
Input: n=4
Output:
[0, 1], [2, 3],
[0, 2], [1, 3],
[0, 3], [1, 2]
示例 2
Input: n=8
Output:
[0, 1], [2, 3], [4, 5], [6, 7],
[0, 2], [1, 3], [4, 6], [5, 7],
[0, 3], [1, 2], [4, 7], [5, 6],
[0, 4], [1, 5], [2, 6], [3, 7],
[0, 5], [1, 4], [2, 7], [3, 6],
[0, 6], [1, 7], [2, 4], [3, 5],
[0, 7], [1, 6], [2, 5], [3, 4]
PS以下答案不符合要求。前两个 (= n/2) 对 ([0, 1], [0, 2]) 没有“3”,因此答案不满足“0”和“1”、“2”的条件, "3" 必须在前两对中。
>>> n=4
>>> for i in range(0, n-1):
... for j in range(i+1,n):
... print( [i, j] )
...
[0, 1]
[0, 2]
[0, 3]
[1, 2]
[1, 3]
[2, 3]