我大约有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库吗?