我的问题与此处提出的问题非常相似: 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}。这很好,但现在我不知道哪个区间对应于哪个实验室(没有再通过列表,逐个检查每个实验室,这可能是低效的。)
任何人都可以向我解释如何轻松完成这项工作吗?谢谢你的帮助!
答案 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;