【问题标题】:Event's scheduling algorithm事件的调度算法
【发布时间】:2015-10-15 14:23:56
【问题描述】:

我有一个事件列表,每个事件都有一个持续时间。 我正在寻找一种算法来安排这些事件一天。从上午 9 点到中午 12 点,然后从下午 1 点到不早于下午 4 点且不迟于下午 5 点。

我不确定解决这个问题的好方法是什么。 由于可能有几种可能的解决方案,我的第一个想法是测试随机组合的正确性。

我想知道是否有更确定性的方法来解决这个问题。 谢谢;)

编辑

@svs 事件的时间以分钟为单位,任何事件都不应重叠。 除了中午 12 点到下午 1 点的午休时间外,活动之间也不需要暂停。

【问题讨论】:

  • 你的规则是什么?如果您没有,只需按顺序填写时间表,只要它适合..
  • 这基本上是2个背包的背包问题。虽然我们知道整数权重的伪多项式解,但没有已知的多项式解。
  • I've got a list of events each having a duration. 持续时间的分辨率是多少 - 秒、分钟、小时?事件不应该重叠吗?事件之间应该有暂停吗?有什么限制吗?是否正在尝试最小化这两个时间窗口的剩余时间?
  • 如果您发布一些您想要实现的目标的示例会有所帮助。
  • @ergonaut 那行不通。如果不合适,我是否必须回溯并尝试不同的排序?

标签: java algorithm scheduling


【解决方案1】:

好的,因为您基本上有两个相等的时隙桶,您基本上可以按顺序安排它们,而不管顺序如何,假设有解决方案,请寻找如何使它们均匀。从存储桶 A 和 B 开始。

将最大的事件 e1 放入桶 A。 然后将下一个最大的事件 e2 放入桶 B。 将最长 e1-e2 分钟的最大事件放入桶 B。继续添加到存储桶 B,直到您的存储桶 B 的总分钟数不超过 A 的总分钟数。

然后重复上述操作,(将 A 切换为 B)。

继续重复上述操作,直到您完成您的活动。

这只会起作用,因为您每个存储桶的长度相同,都是 180 分钟。

实际上,既然你有这个 4-5pm 规则,任何额外的事件都会在最后留下。他们都将进入一个桶,这将是下午的桶。如果由于某种原因您有一个超过 180 分钟的活动,那么将预订下午。然后,如果您在早上(从最大到最小)尽可能多地容纳,那么其余的将在下午进行。

【讨论】:

  • @G.Bach 他解释了 4:89 在顶部的含义。活动 4 时长 89 分钟。
  • 假设你有两个时间窗口,100 分钟和 80 分钟,jobs [1:50, 2:50, 3:80],那么如果我理解正确的话,这个算法就会失败。跨度>
  • 好吧,我错过了这一点。我以为你像牙医一样有无限的日子。您希望这一切都在一天之内完成……就像会议一样!
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 2013-05-14
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
相关资源
最近更新 更多