我有一个1到100的数字线。
在该数字线的范围内,我可以添加和删除许多线段。这些线段可以相互交叉和重叠。
对于给定的x1和x2,我需要一种有效的算法来迭代所有相邻的点对(包括x1和x2),从而提供对相邻点之间运行的所有线段列表的访问。
此黑色数字线和彩色线段的结果类似于:
[0-20] -> []
[20-30] -> [red]
[30-40] -> [red, green]
[40-50] -> [green]
[50-60] -> []
[60-80] -> [purple]
[80-100] -> []
答案 0 :(得分:3)
您想使用interval tree。
答案 1 :(得分:0)
创建边界记录列表,其中每个边界的格式为
bound.type = start,finish
bound.position = 0..n
bound.color = red,green,blue...
并为每个线段添加两个这样的记录到列表(每端的ine)。然后按位置对所有记录进行排序。 现在,如果您按如下方式遍历列表:
colors=[]
write '[0'
for each bound in list
write '-',bound.pos,'] -> [',colours,']'
if bound.type = start then
add bound.color to colors
else
remove bound.type from colors
write '[',bound.pos
write '-',n'] -> []'
如果第一个线段从0开始或者最后一个线段以n结束,你将需要做一点整理。