【问题标题】:Find the point where maximum intervals overlap for certain interval length找到最大间隔重叠一定间隔长度的点
【发布时间】:2021-03-08 03:44:05
【问题描述】:

在给定每个人的忙碌时间列表的情况下,我正在尝试最大限度地提高活动的出席率。该活动可以在特定日期和时间(例如 3 月 1 日至 3 月 8 日 9-5)之间的任何时间安排,并且出席人数最大化。

到目前为止,我已经尝试使用滑动窗口方法和此处描述的计数方法 (https://www.geeksforgeeks.org/find-the-point-where-maximum-intervals-overlap/) 但是我只设法让滑动窗口方法在 O(n^3) 的时间复杂度下工作,不幸的是对我的用例来说还不够好。计数方法不起作用,因为我可以找到最大间隔,但不能找到某个时间范围。

最坏的情况用例是约 500 人和一个月的时间跨度。

任何帮助将不胜感激。

【问题讨论】:

  • 繁忙时间列表如何给出?有多少繁忙的活动?
  • 繁忙时间列表采用 [{startdate, enddate}, ... etc] 的形式,但对于给定的时间段,我也有 1 和 0 的形式,其中 1 空闲,0很忙 Ex [[1,0,1],[0,1,0]] 其中每个代表一个人。一天中的繁忙活动可以有多少人想安排多少,所以没有限制
  • 每小时提到繁忙/空闲时段?
  • 这是我拥有的数据示例 [ { start: 2021-03-03T05:00:00.000Z, end: 2021-03-03T07:00:00.000Z }, { start: 2021- 03-03T09:00:00.000Z,结束:2021-03-04T04:30:00.000Z } ]。这将代表一个人一天的日历。目前我每隔 5 分钟做一次,但是这个间隔仍然太大,无法在合理的时间范围内进行计算。

标签: javascript node.js json algorithm


【解决方案1】:

【讨论】:

  • 当然,使用这个 npm 包npmjs.com/package/interval-tree-type,我初始化了一个树。然后到这棵树,我将我的数据 { start: 2021-03-03T09:00:00.000Z, end: 2021-03-04T04:30:00.000Z } 并使用 tree.insert(start.getTime( ), end.getTime())。这以毫秒为单位存储间隔。使用它,然后我对我希望召开会议的每个时间间隔使用各种“滑动窗口”。这将返回一个数组,您可以从中获取长度。物品越多,人越忙。所以我们从中取最小值并计算最佳时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多