我想找到包含整数值的集合的交集? 如果说你有4-5个2k-4k整数列表,最有效的方法是什么?当集合不相交时,是否有任何与联合查找相似的交集查找算法?
1
A
回答
0
如果你有记忆腾出:
- 创建一组,将持有的每个值的出现次数的数量。
- 对于每一个整数我在每个组,增加我
- 提取整数的出现次数的多少与一些OCCURENCES等于套数的
这是理论上的O(总和所有集合基数+检索)
其中retrieveal
可以是您的整数范围(如果您使用原始数组)或您的集合的联合的基数(如果您使用散列表来枚举定义发生的值)。
如果你的集合的边界是已知的而且很小,你可以用一个足够大的整数的简单数组来实现它(通常是256位的8位字符)。
否则,你需要某种散列表,理论上它应该在o(n)中。
1
在许多语言中,例如C++集合被实现为平衡二叉树,因此您可以直接在O(NlogM)
中评估集合交集,只需查看O(logM)
中的其他集合即可。
优化: -
当你想为多套,你可以做到这一点是huffman coding
使用的优化: -
- 使用的集的优先级队列,其选择最小的一套第一个
- 选择两个最小集合首先评估交集并将其添加到队列中。
- 这样做,直到你得到空的交集或剩下一组(交集)。
注:使用std ::设置如果用C++
相关问题
- 1. 查找不相交集合的数量
- 2. 不相交集查找和联合操作的复杂性
- 3. 如何查找集合的交集
- 4. 查找集合交集,并排除
- 5. 寻找对相交集的任意集
- 6. 快速查找算法 - 联合运算 - 与集合论中的联合相同吗?
- 7. 什么是从一组集合中找到所有不相交集合的算法?
- 8. 查找交集
- 9. 查找相交
- 10. 查找具有巨大字典的巨大集合的交集
- 11. 查找集合中是否有任何元素有style.display!==“none”;
- 12. 查找两个单维数组的联合,相交和差异
- 13. 相交的有序集合在Redis的
- 14. 如何相交SphinxQuerySet与查询集
- 15. apache spark上的不相交集合
- 16. 四合院交集算法
- 17. 查找两个集合之间的交集MongoDB中
- 18. 查找集合的所有子集
- 19. 查找NSMutableArrays的交集
- 20. Redis:如何与一个有序集合的“正常”集合相交?
- 21. 当集合数量太多,例如2^n集合时,集合覆盖中是否有任何appproximate算法?
- 22. 不相交集合数据结构
- 23. 查找相交的点
- 24. 用O(1)查找.NET集合集合?
- 25. 在Vertica中查找交集
- 26. 查找相似
- 27. 使用elasticsearch聚合找到桶的联合或交集
- 28. 查找对象集合是否具有给定属性的相同值
- 29. 两个集合中的任何交集
- 30. 需要查找基本操作集合/相交/对称差异JAVA
在Python中你可以使用'set'。 – embert
[线性时间计算集交集?]的可能的副本(http://stackoverflow.com/questions/4642172/computing-set-intersection-in-linear-time) – Dukeling