从向量数组中查找给定向量中的常用元素数

时间:2015-08-12 06:21:34

标签: algorithm data-structures

存在给定的不同大小的载体阵列,并且所有载体中的元件总数不超过10 4 。每个载体包含至少1个且最多10个 4个唯一整数,每个整数在1到10 4 范围内。

将有10个 5 查询,其中每个查询要求查找某些给定向量中的公共整数数(最多4个)。

例如: 4个载体:

1 2 5
3 5 6
1 3 6
6 7

1查询:

2 3 (vectors indexed 2 and 3)

答:

2 (2 common integers {3,6})

我无法为这个问题找到有效的解决方案。什么算法/数据结构最适合这个问题?任何参考文献都会非常有用。

编辑:超过4个向量中不会出现整数

2 个答案:

答案 0 :(得分:1)

如果您的矢量已排序,您可以这样做。您从所有第一个向量元素中的最大元素开始(因为之前不能有共同元素),并且您尝试找到最小的最大公共元素。如果存在,则从向量的其余部分开始。否则你只要看下一个合理的候选人。

v1, .., v4表示四个选择的向量。

Let i1=i2=i3=i4=0
While (i1 < v1.length, i2 <v2.length, i3 < v3.length, i4 < v4.length)
    Let X = max(v1[i1],v2[i2],v3[i3],v4[i4])
    Increase i1, i2, i3, i4 such that v1[i1]>=X, v2[i2]>=X, v3[i3]>=X, v4[i4]>=X
    If v1[i1]=v2[i2]=v3[i3]=v4[i4]
        count++
        i1++

答案 1 :(得分:0)

将向量存储在一个集数据结构中,该结构允许您在O(1)中进行查找并迭代O(N)中的所有元素。

对于每个查询,只迭代其中一个向量中的元素,并为每个元素检查它是否存在于另一个向量中。