最大事件拦截

时间:2018-01-31 12:36:07

标签: algorithm events overlap

我正在试图找出一种能够检测事件最大交叉次数的算法。以下图片将说明情况。

我有多个可以重叠的事件,我必须确定所有事件之间的最大重叠。

我知道什么?

我知道活动ID 开始时间结束时间。我也有坐标

什么是最大事件重叠?

在图中所示的这种情况下,最大值 3 。这是因为有一次只有3个事件重叠。例如ID:1,3,41,3,5

Events in time

我有一个需要很多周期的解决方案。但我无法找到适合具有许多事件的Web应用程序的快速优雅解决方案。

提前感谢您的所有答案。如果您发现一些语法错误,请编辑帖子。感谢。

1 个答案:

答案 0 :(得分:1)

使用扫描线算法。以下是它应该如何适用于您的情况:

1-创建一个名为Activity的向量。

2-将每个事件分成两个事件:

  • (开始时间,1):此处的 1 表示第一部分表示开始时间。

  • (结束时间,-1) -1 此处表示第一部分表示结束时间。

3-将新事件插入向量sweep

4-按照第二部分递增顺序的平局,按第一部分的递增顺序对创建的矢量进行排序。

5-现在,以下伪代码应该回答您的问题:

sweep

此处int answer = 0, eventsCount = 0; for(int i = 0 -> sweep.size()){ eventsCount += sweep[i].second; answer = max(answer, eventsCount); } 表示当前时间打开事件的数量,而eventsCount表示您目前为止的最佳答案。最后,您可以在变量answer中找到问题的答案。