在重叠间隔中查找所有间隔(重叠和非重叠)

时间:2012-06-12 02:03:52

标签: algorithm data-structures

我的问题与此处提出的问题非常相似: Finding elementary intervals in overlapping intervals

我喜欢那里给出的顶级解决方案,但由于需要保留额外的关键信息,我需要对算法进行一些调整/进一步解释。与背景一样,这些数字是数据库中参与者的年龄范围。我需要计算重叠,以便我可以在重叠的研究实验室之间平均分配参与者,如果没有重叠,我可以将所有参与者都放到那个实验室。

这就是我得到的:

Interval    Lab
{75, 105}    A
{100, 120}   B
{100, 130}   C

这是我想从输入中得到的(所以我知道要查询的内容):

Interval    Lab(s)
{75, 100}    A
{100, 105}   A, B, C
{105, 120}   B, C
{120, 130}   C

使用上一个问题中给出的顶级算法,我可以轻松获得嵌套: {75,100,105,120,130} 这导致间隔:{75,100} {100,105} {105,120} {120,130}。这很好,但现在我不知道哪个区间对应于哪个实验室(没有再通过列表,逐个检查每个实验室,这可能是低效的。)

任何人都可以向我解释如何轻松完成这项工作吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:4)

使用相关实验室创建第二个数组

{A, [B,C], A, B, C}
{75, 100, 105, 120, 130}

在创建间隔时,请保留一组正在运行的实验室。当您点击索引i时,添加第i个实验室(如果不存在),如果不存在,请将其删除。将每个新的间隔i与i + 1与集合中的项目相关联。

如,

i = 0; set = {A}; interval = 75-100; 
i = 1; set = {A,B,C}; interval = 100-105; 
i = 2; set = {B,C}; interval = 105-120; 
i = 3; set = {C}; interval = 120-130;