我正在试图找出一种能够检测事件最大交叉次数的算法。以下图片将说明情况。
我有多个可以重叠的事件,我必须确定所有事件之间的最大重叠。
我知道什么?
我知道活动ID ,开始时间和结束时间。我也有坐标。
什么是最大事件重叠?
在图中所示的这种情况下,最大值 3 。这是因为有一次只有3个事件重叠。例如ID:1,3,4
或1,3,5
。
我有一个需要很多周期的解决方案。但我无法找到适合具有许多事件的Web应用程序的快速优雅解决方案。
提前感谢您的所有答案。如果您发现一些语法错误,请编辑帖子。感谢。
答案 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
中找到问题的答案。