如何以Pythonic方式找出k个集合中n个集合的最大交集元素
找出多个子集间的最大交集(k个集合中n个集合的最常见元素)
高效解决思路
要找出10个集合中所有9个集合组合的交集,无需暴力枚举所有可能的9集合组合。核心逻辑:如果一个元素出现在9个集合里,那它仅缺席1个集合——不管去掉哪个包含它的集合,它都会留在剩下的9个集合的交集中。因此我们只需要统计每个元素在所有集合中的出现次数,筛选出出现次数等于「总集合数-1」的元素即可。
Python实现代码
from collections import Counter # 把所有集合整理到列表中(原问题里set_3未定义,这里按给出的集合汇总) all_sets = [ {0, 3, 4}, # set_0 {1, 3, 4}, # set_1 {1, 5, 23, 8, 24},# set_2 {1, 2, 6, 10}, # set_4 {1, 60, 34, 2}, # set_5 {1, 45, 32, 4}, # set_6 {1, 6, 9, 14}, # set_7 {1, 56, 3, 23}, # set_8 {1, 34, 23, 3} # set_9 ] # 统计每个元素在集合中的出现次数 element_count = Counter() for s in all_sets: element_count.update(s) # 筛选出仅缺席1个集合的元素(对应原问题的9个集合场景,找出现8次的元素) target_elements = [elem for elem, cnt in element_count.items() if cnt == len(all_sets) - 1] print(target_elements) # 输出: [1]
代码说明
- 用
collections.Counter统计元素出现次数,时间复杂度为O(M)(M是所有集合的元素总数),远优于暴力枚举组合的低效方式。 - 筛选条件
cnt == len(all_sets)-1精准匹配了「出现在n-1个集合中」的要求,刚好对应问题中找9个集合交集的需求。
内容的提问来源于stack exchange,提问作者Caterina
相关产品推荐
相关产品推荐

