Algorithm 寻找多个区间之间的重叠
假设我有一个区间(或范围)列表(例如10-15、5-7、9-12..)。问题是找到重叠范围的子集。我当然可以用这个 我遇到的实际问题是有多个范围。最好用一个例子来解释: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个独立的间隔树来找出这个问题。有更好的方法吗 您可以只构建一个包含所有间隔的间隔树。您只需跟
也许我可以使用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个项目。欢迎使用堆栈溢出!虽然这可以从理论上回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。欢迎使用堆栈溢出!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。