algorithm - 最大事件拦截

标签 algorithm events overlap

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

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

我知道什么?

我知道事件ID开始时间结束时间。我也有坐标

什么是最大事件重叠?

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

Events in time

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

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

最佳答案

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

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

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

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

  • (end time, -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 中找到。

关于algorithm - 最大事件拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48542392/

相关文章:

sql - 按降序对列表进行排序的时间复杂度。

c - 如何确定同一条线上的最大点数?

javascript - 如何使用 mootools 确定损坏图像的错误代码

javascript - 当所有异步处理程序完成时执行 javascript 函数

javascript - Node.js:如何跨模块发送事件

r - 比较并找到R中的重叠范围

css - 如何防止两个div中的 float 内容重叠?

algorithm - (非压缩)Trie 的使用

algorithm - 具有 FP16 限制的 GLSL-ES 随机颗粒噪声

Android:弹出键盘时,布局不可见。我该如何解决这个问题?