我有一组(大)数据。它由具有timestamp属性的元素组成,因此为了清楚起见,我将它们称为事件(尽管它可以是任何类似的属性)。
如果我想能够快速获取A和B之间的时间戳的所有事件,我应该将它们存储在TreeMap中。但这不是故事的结局。
有离散事件(带有单个时间戳)和连续事件(带有两个时间戳 - 一个用于开始,一个用于结束)。
现在,让四个时间戳A B C D,使A< B< C< D.还有一个连续事件x,从A开始,到D结束。
我想知道是否有一个有效的数据结构,当被要求B和C之间的事件时,也会返回事件x(因为它与我们正在查询的句点有一个共同的部分)。对我来说最重要的是获取元素的成本,但构建和更新结构的成本也很重要。
最后,如果已经有这种结构的Java实现可能会更好。
答案 0 :(得分:2)
您正在寻找Segment-Tree。单个事件的实现是微不足道的(选择简单的一个取决于树的实现) -
[A,A]
或:[A,A+e]
,e
是可以表示的最小正数。