用于在时间轴上折叠重叠事件的算法/数据结构

时间:2013-03-29 18:37:53

标签: algorithm timeline

我正在寻找一种算法来执行以下操作。我有一个事件的时间表,跨越可以重叠的时间段。我想将这些事件折叠成一个非重叠时间段,每个时间轴都由一个或多个事件的存在来定义。

虽然在概念上很简单,但抓住所有可能的案例并适当地分割时间表可能会有点麻烦。

为了说明(这里横轴是时间):

Event A   -----
Event B      ----

成为

Event A   ---
Event A+B    --
Event B        --   

另一个例子:

A    -----------
B       ---
C            --

变为:

A    ---
A+B     ---
A          --
A+C          --
A              -

是否有任何标准的算法/数据结构?

1 个答案:

答案 0 :(得分:2)

将每个事件的开始和结束时间放在一个数组中,并按非递减的顺序对它们进行排序(如果“开始”和“结束”发生同时,通过放置“结束”来断开关系“第一次。”

我们会做sweep line算法。

遍历排序的数组,同时保持一组“活动”事件:每当看到开始/结束时间时,分别从集合中添加或删除相应的事件,并添加(如果活动集非空)您的解决方案的事件。

生成的事件集是不相交的,可以根据需要进行标记。