提供一种以低计算成本获取相交周期的方法的数据结构

Data structure that provides a way to acquire intersecting periods with low computational cost

我有一组(大)数据。它由具有时间戳 属性 的元素组成,因此为了清楚起见,我将它们称为事件(尽管它可以是任何可比较的 属性)。

如果我希望能够快速获取时间戳在 A 和 B 之间的所有事件,我应该将它们存储在 TreeMap 中。但这并不是故事的结局。

有离散事件(具有单个时间戳)和连续事件(具有两个时间戳 - 一个用于开始,一个用于结束)。

现在,假设有四个时间戳 A B C D,使得 A < B < C < D。还有一个从 A 开始到 D 结束的连续事件 x。

我想知道是否有一种有效的数据结构,当询问 B 和 C 之间的事件时,也会 return 事件 x(因为它与我们查询的周期有共同的部分)。对我来说最重要的是获取元素的成本,但构建和更新结构的成本也很重要。

最后,如果这种结构的 Java 实现已经可用,那就更好了。

您正在寻找 Segment-Tree。单个事件的实现是微不足道的(选择简单的取决于树实现)-

  • 具有相同的时间戳:[A,A],或:
  • "epsilon" 范围:[A,A+e] 这样 e 是可以表示的最小正数。

同时查看 this question, and you can search/ask with this 标签。享受