【发布时间】:2014-03-10 08:43:18
【问题描述】:
我想找到包含整数值的集合的交集? 如果假设您有 4-5 个具有 2k-4k 整数的列表,那么最有效的方法是什么?
【问题讨论】:
-
在python中你可以使用
set。
标签: algorithm sorting data-structures computer-science
我想找到包含整数值的集合的交集? 如果假设您有 4-5 个具有 2k-4k 整数的列表,那么最有效的方法是什么?
【问题讨论】:
set。
标签: algorithm sorting data-structures computer-science
如果你有多余的内存:
这在理论上是 O(所有集合基数的总和 + 检索)
其中retrieveal 可以是整数的范围(如果您使用的是原始数组)或集合并集的基数(如果您使用哈希表来枚举发生被定义)。
如果您的集合的边界已知且很小,您可以使用一个简单的整数数组来实现它,该数组大到足以容纳最大集合数(通常为 256 个集合的 8 位字符)。
否则,您将需要某种哈希表,理论上它仍应在 o(n) 中。
【讨论】:
在许多语言中,例如 c++ 集合被实现为平衡二叉树,因此您可以直接评估 O(NlogM) 中的集合交集,使用 n 作为较小的集合大小,只需查看 O(logM) 中的另一个集合即可。
优化:-
您可以根据需要对多个集合进行优化,在huffman coding 中使用:-
- 使用集合的优先级队列,首先选择最小集合
- 选择两个最小的集合,首先评估交集并将其添加到队列中。
- 执行此操作,直到获得空的交集或剩下一组(交集)。
注意:如果使用c++,则使用std::set
【讨论】: