查询快速时间间隔的数据结构

时间:2009-10-16 20:15:35

标签: data-structures

我有一组时间间隔 In =(an,bn)。我需要运行大量的查找,我有时间 t 并需要快速返回包含 t 的时间间隔,例如,这些时间间隔一个< = t< = bn

对此有什么好的数据结构或算法?

如果重要,在我的情况下, bn 是整数。

4 个答案:

答案 0 :(得分:17)

您要找的是Interval TreeRange Tree的类型)。

它们具有与其他树结构(例如RB树)类似的对数查找时间,因此您应该看到使用类似Java TreeMap或STL映射的可比性能。

答案 1 :(得分:2)

这基本上是一个空间分区问题。你有一个带有容器的大空间和那个空间中的特定点,它接触的容器是什么?许多游戏必须解决这个问题,所以从那里开始并不是一个坏主意。寻找有关“宽相碰撞检测”的文章。

最简单的方法是将您的数字空间划分为不变的数量。每个部分都知道哪些集合与之相交,每当添加新集合时您都会计算出这些集合。现在,您只需要检查点所在的部分中包含的集合,而不是在有点时测试每个集合。

使用的另一种通用且有效的算法是二进制空间分区。此算法将您的空间细分为两侧。每一方都知道哪些集合与之相交。您可以递归地重复此过程以达到所需的精度(尽管创建小于最小集合范围的细分没有意义。)

答案 2 :(得分:2)

欢迎您查看完全解决此问题的C# implementation I've posted on CodePlex for IntervalTree

伊多。

答案 3 :(得分:0)

你的问题只是一维的,所以它比大多数游戏中的空间分区问题要简单一些。 你可以只有一个简单的BST,并在每个叶子中记住叶子左边的间隔列表。

如果您有间隔A(0,10)和B(5,15),那么树的叶子将是(0表示空列表),(5表示A),(10表示A,B)和(15与B)。