提供一种以低计算成本获取相交周期的方法的数据结构
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 标签。享受
我有一组(大)数据。它由具有时间戳 属性 的元素组成,因此为了清楚起见,我将它们称为事件(尽管它可以是任何可比较的 属性)。
如果我希望能够快速获取时间戳在 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 标签。享受