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

时间:2015-03-29 19:52:12

标签: java data-structures time-complexity

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

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

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

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

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

最后,如果已经有这种结构的Java实现可能会更好。

1 个答案:

答案 0 :(得分:2)

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

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

查看this问题,您也可以使用this标记进行搜索/询问。享受