【问题标题】:Given an interval, Find all intervals In a list of Intervals给定一个区间,在区间列表中查找所有区间
【发布时间】:2017-04-12 02:08:54
【问题描述】:

假设我有一个这样的范围列表

[[1,3], [2,5], [4,6], [8,10], [12,15], [13,17]]

现在我想找到一个范围说[3,11] 落入。我的算法应该给我这个范围落入的所有范围。例如这个的输出应该是

Output - [1,3], [2,5], [4,6], [8,10]

我该如何解决这个问题?

PS:我知道分段树可能会有所帮助。我可以在哪里构建树来存储区间并查询位于区间内的点,但是如何获取给定区间的所有区间。

【问题讨论】:

  • 来自en.wikipedia.org/wiki/Interval_tree 我们有“具体来说,它允许人们有效地找到与任何给定区间或点重叠的所有区间”
  • 如果这是给定范围列表的一次性任务,您只需暴力破解列表。如果您需要经常查询相同的数据,您可以构建一棵树。如果数据经常更改但您很少查询,您可能会发现另一种结构更有用。

标签: algorithm intervals segment-tree interval-tree


【解决方案1】:

区间树绝对是你需要的数据结构。我遇到了同样的问题,为了提高性能,我使用了 Augmented Interval Tree,其中每个节点除了范围的边界外,还包括与 最大值相关的信息节点的子树

您可以在这里找到深入的解释和 Java 实现:Data Structures: Augmented Interval Tree to search for intervals overlapping

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2019-02-14
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多