from itertools import combinations
from collections import defaultdict
A = [{1,7,4},{2,8,5},{1,3},{2,6}]
U = set.union(*A)
result = defaultdict(list)
for i in range(1, len(U)):
combs = combinations(U, i)
for c in combs:
if all(set(c) & l for l in A):
result[len(c)].append(set(c))
if result:
break
result
# defaultdict(list, {2: [{1, 2}]})
这是一个暴力解决方案。显然,这就是众所周知的NP-complete问题Hitting Set。你知道吗
是否有必要使组合装置尽可能小?如果没有,这将起作用:
另一种更简洁的方法,如评论中所建议的:
相关问题 更多 >
编程相关推荐