【问题标题】:Maximum event interceptions最大事件拦截
【发布时间】:2018-01-31 12:36:07
【问题描述】:

我正在尝试找出一种算法,该算法将随着时间的推移检测事件交集的最大数量。下图将说明情况。

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

我知道什么?

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

什么是最大事件重叠?

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

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

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

【问题讨论】:

  • 您能提供给我们您的代码吗?也许我们可以处理现有代码并帮助改进它

标签: algorithm events overlap


【解决方案1】:

使用扫线算法。以下是它在您的情况下的工作方式:

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

2- 将每个事件拆分为两个事件:

  • (start time, 1):这里的1表示第一部分表示开始时间。

  • (结束时间,-1):这里的-1表示第一部分表示结束时间。

    李>

3- 将新事件插入向量sweep

4- 按第一部分的升序对创建的向量进行排序,以防出现平局,以第二部分的升序排列。

5- 现在下面的伪代码应该可以回答你的问题了:

int answer = 0, eventsCount = 0;
for(int i = 0 -> sweep.size()){
    eventsCount += sweep[i].second;
    answer = max(answer, eventsCount);
}

这里eventsCount 表示当前时间打开的事件数,而answer 表示您迄今为止的最佳答案。最后,您的问题的答案将在变量answer 中找到。

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2021-06-27
    • 2019-06-04
    • 1970-01-01
    • 2015-10-26
    • 2011-04-10
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多