线段数字线上的相邻点列表?

时间:2012-08-23 18:04:04

标签: algorithm

我有一个1到100的数字线。

在该数字线的范围内,我可以添加和删除许多线段。这些线段可以相互交叉和重叠。

对于给定的x1和x2,我需要一种有效的算法来迭代所有相邻的点对(包括x1和x2),从而提供对相邻点之间运行的所有线段列表的访问。

enter image description here

此黑色数字线和彩色线段的​​结果类似于:

[0-20] -> []
[20-30] -> [red]
[30-40] -> [red, green]
[40-50] -> [green]
[50-60] -> []
[60-80] -> [purple]
[80-100] -> []

2 个答案:

答案 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结束,你将需要做一点整理。