arrays - 算法:从数组中找到最大的子集

标签 arrays algorithm intersection

我有多个数组。我需要找到最大的数组子集,这样,该子集中的所有数组至少有一个彼此共有的元素。 最大的意思是子集应该有最多的数组。我对查找子集中有哪些特定数组不感兴趣,而是对子集的大小感兴趣。 例如如果:

a1 = [1,3,7]
a2 = [3,5,7]
a3 = [2,8,9]
a4 = [7,8,9]

然后我应该得到最大子集大小为 3,因为给定数组的最大子集将是 a1a2a4,因为:
a1 ∩ a2 != ∅ && a1 ∩ a4 != ∅ && a2 ∩ a4 != ∅

我有一个函数 common(array1,array2) 如果 array1 ∩ array2 != ∅ 则返回 true 否则返回 false。
解决它的一种方法是使所有可能的对数组,并检查它们的共性。但这里的问题是,给定一个包含共同元素的对列表,如何构造最大的子集。
例如给定上面的例子,如何从 (a1,a2), (a1,a4), (a2,a4), (a3,a4) 构造 {a1,a2,a4}。

最佳答案

由于您对查找子集中有哪些特定数组不感兴趣,而只是查找子集的大小,因此一种方法是创建所有可能值到包含该值的数组数量的映射。

对于问题中的示例, map 看起来像这样:

count[1] = 1 // contained by a1
count[2] = 1 // contained by a3
count[3] = 2 // contained by a1, a2
count[7] = 3 // contained by a1, a2, a4
count[8] = 2 // contained by a3, a4
count[9] = 2 // contained by a3, a4

count 映射中的最大值(在本例中为 3)是所需的结果。

关于arrays - 算法:从数组中找到最大的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33617810/

相关文章:

Java indexOf 函数比 Rabin-Karp 更高效?文本搜索效率

ruby - 查找并返回嵌套数组中最长的数组及其大小

algorithm - 如何识别2D中2个矩形之间重叠区域的边界点?

R - 在 data.frame 中的成对比较组中计算相似值

java - 在 HashSet 中使用并集和交集方法

arrays - flatMap 中的 "Cannot convert return expression"里面有一个无意义的表达式

sql - Codeigniter Active Record - 删除不在数组中的位置

c++ - 使用函数从数组中索引最小值的问题

algorithm - 算法:有没有解决比较的好方法?

javascript - 在 Javascript 中合并数组中的链接数据