python - 找到一组集合,使得所选集合之间的元素交集最大
问题描述
我有大约 300,000 (300K) 个集合,每个集合包含 0-100 个元素。
s1={a,b,x,y}
s2={a}
s3={a,x,y}
s4={x,y}
我的问题是,我如何有效地找到一组集合(比如我需要从 300K 集合中收集 5000 个集合),其中这些选定集合之间的元素交集最大?
即
在可以从 300K 集合中挑选的 5000 集合的所有可能组合中,我需要一个 5000 集合的集合,使得它的 5000 集合中的交集(公共元素的数量)大于(>=)5000 集合的任何其他组合可以从 300K 套中获得。
例如:从上面显示的集合中,
假设我需要 2 个集合,其中元素之间存在最大交集。结果集合将是 -> C = {s1,s3} 与 [common elements={a,x,y}, common elements count=3]
假设我需要 3 个集合,其中元素之间存在最大交集。结果集合将是 -> C = {s1,s3,s4} 与 [common elements={x,y}, common elements count=2]
Bruteforce 方法不是一种选择,因为来自 300K 集合的 5000 集合的可能组合的总数是巨大的。
300K choose 5000 = O(10^11041)
是否有任何智能数据结构和算法可用于获取所需的集合集合?
另外,是否有任何可用的 python 库可供我使用?
解决方案
推荐阅读
- ldap - 在 Zeppelin 上使用 Shiro 进行身份验证:主要参数不能为空
- javascript - 常量 JSON 对象值在循环中更改,同时在 javascript 中动态创建新对象
- r - 食谱包无法在 step_interact 中创建交互项
- python - UnboundLocalError:分配前引用的局部变量“ff_cog”,未解决
- r - 将数据框拆分为嵌套数据框和矩阵的列表
- c++ - SDL_GetCurrentDisplayMode 未返回正确的窗口大小
- python - 在 Flask 上检查对象中的元素
- node.js - 猫鼬更新
- python - 需要帮助计算直到两个数字可整除的脚本
- php - 附加函数()在 PHP 响应的 jQuery Ajax 中不起作用