找到期间最大空闲时隙中间的算法?

Hen*_*k N 5 algorithm scheduling

假设我想安排 00:00\xe2\x80\x9300:59 期间的事件集合。我将它们安排在整分钟(00:01,从不 00:01:30)。

\n\n

我想在那段时间内将它们间隔得尽可能远,但我事先不知道在那一小时内总共会有多少个事件。我今天可能会安排一场活动,然后明天再安排两场活动。

\n\n

我脑子里有明显的算法,我可以想出暴力的方法来实现它,但我确信有人知道更好的方法。我更喜欢 Ruby 或我可以翻译成 Ruby 的东西,但我会接受我能得到的。

\n\n

所以我脑子里能想到的算法是:

\n\n

活动 1 于 00:00 结束。

\n\n

事件 2 在 00:30 结束,因为该时间距现有事件最远。

\n\n

事件 3 可能在 00:15 或 00:45 结束。所以也许我只选择第一个,00:15。

\n\n

赛事 4 于 00:45 结束。

\n\n

事件 5 在 00:08 左右结束(从 00:07:30 向上取整)。

\n\n

等等。

\n\n

因此,我们可以查看每对拍摄的分钟数(例如 00:00\xe2\x80\x9300:15、00:15\xe2\x80\x9300:30、00:30\xe2\x80\x9300:00),选择最大的范围 (00:30\xe2\x80\x9300:00),将其除以二并舍入。

\n\n

但我确信它可以做得更好。分享吧!

\n

Geo*_*met 1

由于您无法重新安排活动,并且您事先不知道有多少活动将到达,因此我怀疑您自己的建议(使用 Roman 的注释使用 01:00)是最好的。

但是,如果您对最大事件数量有任何估计,则可以对其进行优化。例如,假设您估计最多 7 个事件,您可以准备60 / (n - 1)= 10 分钟的时段并按如下方式安排事件:

  • 00:00
  • 01:00
  • 00:30
  • 00:10
  • 00:40
  • 00:20
  • 00:50 // 间隔 10 分钟

请注意,最后几个事件可能不会到达,因此使用 00:50 的可能性较低。

这比基于非估计的算法更公平,特别是在使用所有槽的最坏情况下:

  • 00:00
  • 01:00
  • 00:30
  • 00:15
  • 00:45
  • 00:07
  • 00:37 // 仅相隔 7 分钟