代码之家  ›  专栏  ›  技术社区  ›  amit

发现多个间隔之间的重叠

  •  1
  • amit  · 技术社区  · 15 年前

    假设我有一个间隔(或范围)列表(例如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个单独的间隔树来找出答案。有更好的办法吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Seb    15 年前

    你可以只构建一个包含所有间隔的间隔树。您只需跟踪间隔属于哪个范围,例如:

    {
      int range;
      int intervalFrom;
      int intervalTo;
    }
    

    您可以将该结构放在间隔树中,并检查是否重叠。当你得到有问题的区间时,你就可以知道每个区间属于哪个区间。

        2
  •  0
  •   Devashish Das    8 年前

    间隔[a0,b0]和[a1,b1]重叠iff min(b1,b0)>max(a1,a0)