查找包含给定数字的所有间隔

时间:2012-11-17 13:52:51

标签: algorithm data-structures

我有一个可能重叠的间隔列表。然后,我有一个值,问题是找到包含该值的所有区间,值本身是包容性的。 我已经看到了几种方法,包括范围树,KD树等。但是,我想知道是否有针对此问题的特定优化解决方案,考虑:

  1. 间隔列表很长。 (可能是50K或更多)。
  2. 间隔可能重叠。
  3. 一旦我们开始查询,间隔列表就不会改变。
  4. 列表一旦形成,就会以不同的值查询很多次。
  5. 有人可以建议一些方法来解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:6)

这是一个定义明确的问题,使用区间树(请参阅wikipediaherehere)可以最有效地解决此问题。

我不建议使用哈希表,因为对于具有大量重叠的配置,您最终可能每个条目存储O(n)个段,需要O(n ^ 2)个存储空间。

答案 1 :(得分:1)

如果您不介意昂贵的初始化时间,可以使用您提到的任何技术预先计算您在查询阶段可能遇到的所有相关值的时间间隔,限制为最小值和最大值值。

使用这些结果构造一个哈希表,您将能够在O(1)中找到给定值的所有间隔。