查找集合的集合,以使所选集合之间的元素交集最大

时间:2018-11-13 09:54:39

标签: python algorithm data-structures set set-intersection

我大约有300,000(300K)套,每套包含0-100个元素。

s1={a,b,x,y}
s2={a}
s3={a,x,y}
s4={x,y}

我的问题是,如何有效地找到集合的集合(例如,我需要从300K集合中收集5000个集合),从而使那些选定集合之间的元素交集最大?

在可以从30万个集合中选择的5000个集合的所有可能组合中,我需要一个5000个集合的集合,以使它的5000个集合之间的交集(公共元素数)大于(> =)任何其他5000个集合的组合30万套起。

例如:从上面显示的集合中,

  • 说我需要2组元素之间最大的交集。结果集合将是-> C = {s1,s3},[common elements = {a,x,y},公共元素count = 3]

  • 说我需要3组元素之间最大的交集。结果集合将是-> C = {s1,s3,s4},其中[common elements = {x,y},common elements count = 2]

Bruteforce方法不是一种选择,因为来自30万套集合中的5000套可能组合的总数很大。

300K choose 5000 = O(10^11041)

我可以使用任何智能数据结构和算法来获得所需的集合吗?

还有,我可以使用任何可用的python库吗?

0 个答案:

没有答案