用于确定区间的成员绑定子区间的算法

时间:2017-04-08 00:34:09

标签: algorithm

给出具有开始和结束时间的项目列表(例如,开始日期和结束日期[最多但不包括]在一个日历月中),可由任何成员限制的最小跨越间隔数是多少一个间隔以及上述间隔中的成员是什么?我想一个例子会让这个更清楚(感觉我没有合适的词汇来描述问题):

输入:[A,B,C,D,E]

A: 1,3
B: 2,4
C: 1,10
D: 5,7
E: 5,10

输出

1-2: A,C
2-3: A,B,C
3-4: B,C
4-5: C
5-7: C,D,E
7-10: C,E

如果存在差距,我也想知道(例如4-5不包含在任何项目中)。

我已经考虑了每个项目的基本步行和特别是最小 - 最大考虑因素,BST和间隔树,但是我觉得这里最好的方法是什么。谢谢!

1 个答案:

答案 0 :(得分:0)

  • 第1步:迭代项目,构建表格{第1天,A开头}和{第3天,结束A}的条目列表。
  • 第2步:按日排序此列表。
  • 第3步:合并当天的条目,提供{day 5,[start D,start E]}等条目。

(注意:因为这些日子都在一个月内,所以你事先知道所有可能的日子是什么 - 并且没有多少 - 所以你可以将上述所有三个步骤合并为一个直接的传递使用最多31个桶的桶排序。)

  • 步骤4:迭代合并的条目,跟踪已经开始但尚未结束的项目,并生成所需的输出。