Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 寻找多个区间之间的重叠_Algorithm_Binary Tree_Interval Tree - Fatal编程技术网

Algorithm 寻找多个区间之间的重叠

Algorithm 寻找多个区间之间的重叠,algorithm,binary-tree,interval-tree,Algorithm,Binary Tree,Interval Tree,假设我有一个区间(或范围)列表(例如10-15、5-7、9-12..)。问题是找到重叠范围的子集。我当然可以用这个 我遇到的实际问题是有多个范围。最好用一个例子来解释: 10-15,5-7,9-12 1-2,3-6,14-15 3-5,9-15,10-15 在上述情况下,在第二范围(1)和(2)之间以及在第三范围(3)和(1)、(2)之间存在重叠 基本上,我需要找到项目列表之间的所有重叠 也许我可以使用3个独立的间隔树来找出这个问题。有更好的方法吗 您可以只构建一个包含所有间隔的间隔树。您只需跟

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

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

  • 10-15,5-7,9-12
  • 1-2,3-6,14-15
  • 3-5,9-15,10-15
  • 在上述情况下,在第二范围(1)和(2)之间以及在第三范围(3)和(1)、(2)之间存在重叠

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


    也许我可以使用3个独立的间隔树来找出这个问题。有更好的方法吗

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

    {
      int range;
      int intervalFrom;
      int intervalTo;
    }
    

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

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

    {
      int range;
      int intervalFrom;
      int intervalTo;
    }
    

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

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

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

    你应该考虑你想要/需要什么。您想让所有3个区域重叠还是让任意两个区域重叠?后者会带来很多结果,尤其是超过3个项目。你应该考虑你想要什么/需要什么。您想让所有3个区域重叠还是让任意两个区域重叠?后者将导致许多结果,特别是对于超过3个项目。欢迎使用堆栈溢出!虽然这可以从理论上回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。欢迎使用堆栈溢出!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。