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

时间:2015-11-09 20:37:24

标签: 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!= returns则返回true,否则返回false。解决它的一种方法是制作所有可能的数组对,并检查它们的通用性。但是这里的问题是,给定一个在它们之间有共同元素的对的列表,如何构造最大的子集 例如给出上面的例子,如何从(a1,a2),(a1,a4),(a2,a4),(a3,a4)构造{a1,a2,a4}。

1 个答案:

答案 0 :(得分:2)

由于您不想查找子集中的特定数组,而只关心子集的大小,因此一种方法是创建包含该值的数组的所有可能值的映射。 / p>

对于问题中的示例,地图看起来像:

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)是您想要的结果。