假设我有一个间隔(或范围)列表(例如10-15,5-7,9-12 ..)。问题是找到重叠的范围子集。当然,我可以使用Interval tree。
我遇到的实际问题是有多个范围。最佳解释一个例子:
在上述情况下,第二范围内的(1)和(2)之间以及第三范围内的(3)和(1),(2)之间存在重叠。
基本上,我需要找到所有项目列表之间的重叠。
也许我可以使用3个单独的间隔树来查找它。有一个更好的方法吗?
答案 0 :(得分:1)
您可以只构建一个间隔树,其中包含所有间隔。您只需要跟踪区间所属的范围,例如:
{
int range;
int intervalFrom;
int intervalTo;
}
您可以将该结构放在间隔树中并检查重叠。当你得到有问题的间隔时,你将能够分辨每个属于哪个范围。
答案 1 :(得分:0)
间隔[a0,b0]和[a1,b1]重叠iff min(b1,b0)>最大值(A1,A0)