查找多个间隔之间的重叠

时间:2009-03-17 08:08:39

标签: algorithm binary-tree interval-tree

假设我有一个间隔(或范围)列表(例如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
  4. 在上述情况下,第二范围内的(1)和(2)之间以及第三范围内的(3)和(1),(2)之间存在重叠。

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

    也许我可以使用3个单独的间隔树来查找它。有一个更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

{
  int range;
  int intervalFrom;
  int intervalTo;
}

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

答案 1 :(得分:0)

间隔[a0,b0]和[a1,b1]重叠iff min(b1,b0)>最大值(A1,A0)