组合的高效组合
Efficient combinations of combinations
我需要一组长度递增的组合的所有组合。
第一组是这样创建的:
combinations = list(itertools.combinations(5, 2))
[(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
然后,匹配特定条件的所有组合存储在 matches:
[(0, 2), (0, 3), (0, 4), (3, 4)]
其中,我想找到所有长度为 3 的相交组合:
[(0, 3, 4)]
我只需要找到相互交叉的组合。 [(0, 3), (0, 4), (3, 4)]是相交的,所以[(0, 3, 4)]是一个组合。 [(0, 2, 4)] 不是,因为 (2,4) 不相交
目前我正在使用:
combinations = []
for y in matches:
for x in matches:
if y != x:
el = qsort(unique(y[:] + x[:]))
if el not in combinations and len(el) == it:
combinations.append(el)
但是处理超过 200 个数字的组合需要很长时间。有没有办法更快地做到这一点?
正如 chepner 所建议的,我正在寻找此图中的所有循环或派系。 Networkx 的 enumerate_all_cliques() 是找到它们的简单方法。
我需要一组长度递增的组合的所有组合。 第一组是这样创建的:
combinations = list(itertools.combinations(5, 2))
[(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
然后,匹配特定条件的所有组合存储在 matches:
[(0, 2), (0, 3), (0, 4), (3, 4)]
其中,我想找到所有长度为 3 的相交组合:
[(0, 3, 4)]
我只需要找到相互交叉的组合。 [(0, 3), (0, 4), (3, 4)]是相交的,所以[(0, 3, 4)]是一个组合。 [(0, 2, 4)] 不是,因为 (2,4) 不相交
目前我正在使用:
combinations = []
for y in matches:
for x in matches:
if y != x:
el = qsort(unique(y[:] + x[:]))
if el not in combinations and len(el) == it:
combinations.append(el)
但是处理超过 200 个数字的组合需要很长时间。有没有办法更快地做到这一点?
正如 chepner 所建议的,我正在寻找此图中的所有循环或派系。 Networkx 的 enumerate_all_cliques() 是找到它们的简单方法。