我想找到包含整数值的集合的交集? 如果你说4-5个列表有2k-4k整数,那么最有效的方法是什么?
答案 0 :(得分:1)
在许多语言中,例如c ++集被实现为平衡二叉树,因此您可以通过查看O(NlogM)
中的另一个集来直接评估O(logM)
中的集合交集使用n作为较小的集合大小。
优化: -
如您所希望的那样,您可以执行huffman coding
中使用的优化: -
- 使用首先选择最小集合的集合的优先级队列
- 选择两个最小的集合,首先评估交集并将其添加到队列中。
- 这样做直到你得到空的交叉点集或者剩下一组(交集)。
醇>
注意:如果使用c ++
,请使用std :: set答案 1 :(得分:0)
如果 您需要备用内存:
理论上这是O(所有集合基数+检索的总和)
其中retrieveal
可以是整数的范围(如果您使用的是原始数组)或者您的集合的基数(如果您使用哈希表来枚举值的值)哪个是出现的。)
如果你的集合的边界已知且很小,你可以使用一个足够大的整数数组来实现它,以保持最大数量的集合(通常为256集的8位字符)。
否则你需要某种哈希表,理论上它应该在o(n)中。