存在给定的不同大小的载体阵列,并且所有载体中的元件总数不超过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个向量中不会出现整数
答案 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)中的所有元素。
对于每个查询,只迭代其中一个向量中的元素,并为每个元素检查它是否存在于另一个向量中。