【发布时间】:2015-02-23 06:20:26
【问题描述】:
我有很多组整数。我需要检查一个是否与另一个重叠(两组中至少存在一个相同的元素)。最好的方法是什么。我比较了两种方式:
HashSet<int> hs1, hs2;
hs1.Overlaps(hs2);
和
SortedSet<int> ss1, ss2;
ss1.Overlaps(ss2);
HashSet 更好,因为在这两种情况下,重叠都是可枚举的,并且在可枚举中进行扫描并在集合中查找。
但我觉得存在更好的算法来检查排序集中的重叠。
有谁知道算法,它允许使用两个集合都已排序的事实快速检查重叠?
UPD1 每组的大小约为 100-1000 个分布良好的整数。
【问题讨论】:
-
如果您的序列已排序,您可以执行合并。这可能比构建哈希表要快。
-
@usr,构建集合的成本超出了范围。但无论如何构建哈希表通常比排序更快
-
您关心的是绝对吞吐量还是渐近复杂度?
-
@usr,我的目标是提高性能,我想在真实数据上实现高平均吞吐量。
-
您可以执行任何类型的预计算,例如排序、构建哈希表或其他事情吗?是否是小范围内的整数(例如 [1, 10000])?在这种情况下,您可以构建位图并使用二进制和相交。
标签: c# algorithm set hashset sortedset