【问题标题】:Finding Overlap among multiple intervals查找多个区间之间的重叠
【发布时间】:2009-03-17 08:08:39
【问题描述】:

假设我有一个区间(或范围)列表(例如 10-15、5-7、9-12..)。问题是找到重叠的范围子集。当然我可以使用Interval tree

我遇到的实际问题是有多个范围。最好用一个例子来解释:

  1. 10-15、5-7、9-12
  2. 1-2、3-6、14-15
  3. 3-5、9-15、10-15

在上述情况下,第二个范围的 (1) 和 (2) 之间以及第三个范围的 (3) 和 (1)、(2) 之间存在重叠。

基本上,我需要找到所有项列表之间的重叠。

也许我可以使用 3 个独立的区间树来找出答案。有一个更好的方法吗?

【问题讨论】:

  • 你应该考虑你想要/需要什么。您想要所有 3 个重叠的范围还是其中任何两个重叠的所有范围?后者会导致很多结果,尤其是超过 3 个项目。

标签: algorithm binary-tree interval-tree


【解决方案1】:

您可以只构建一棵包含所有区间的区间树。您只需要跟踪区间所属的范围,例如:

{
  int range;
  int intervalFrom;
  int intervalTo;
}

您可以将该结构放在区间树中并检查是否重叠。当您得到有问题的区间时,您将能够分辨出每个区间属于哪个区间。

【讨论】:

    【解决方案2】:

    区间 [a0, b0] 和 [a1, b1] 重叠当且仅当 min(b1,b0) > max(a1,a0)

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2016-02-05
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多