我正在寻找一种算法来执行以下操作。我有一个事件的时间表,跨越可以重叠的时间段。我想将这些事件折叠成一个非重叠时间段,每个时间轴都由一个或多个事件的存在来定义。
虽然在概念上很简单,但抓住所有可能的案例并适当地分割时间表可能会有点麻烦。
为了说明(这里横轴是时间):
Event A -----
Event B ----
成为
Event A ---
Event A+B --
Event B --
另一个例子:
A -----------
B ---
C --
变为:
A ---
A+B ---
A --
A+C --
A -
是否有任何标准的算法/数据结构?
答案 0 :(得分:2)
将每个事件的开始和结束时间放在一个数组中,并按非递减的顺序对它们进行排序(如果“开始”和“结束”发生同时,通过放置“结束”来断开关系“第一次。”
我们会做sweep line算法。
遍历排序的数组,同时保持一组“活动”事件:每当看到开始/结束时间时,分别从集合中添加或删除相应的事件,并添加(如果活动集非空)您的解决方案的事件。
生成的事件集是不相交的,可以根据需要进行标记。