2015-10-15 84 views
0

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

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

我想知道是否有更确定的解决方法。 感谢;)

EDIT

@svs 的事件的定时是在几分钟内,没有事件应当重叠。 除了午餐休息时间从下午12点到下午1点,事件之间不需要暂停。

+2

你的规则是什么?如果你没有,只要顺序填写日程安排,只要它适合。 – ergonaut

+1

这基本上是背包问题,2背包。虽然我们知道一个整数权重的伪多项式,但它没有已知的多项式解。 – Danstahr

+0

'我有一个每个都有持续时间的事件列表。什么是持续时间的分辨率 - 秒,分钟,小时?该事件不应该重叠?事件之间是否应该暂停?任何限制?正试图将这两个时间窗口的剩余时间减至最少? – svs

回答

0

好吧既然你基本上有两个相等的时隙桶,你可以基本上按顺序安排它们,不管顺序如何,并假设有一个解决方案,寻找你如何能够把它们排除在外。提着水桶A和B.

开始放入桶A. 最大的活动E1再放入放入桶B中的最大事件是在最E1-E2分钟之久斗B. 下一个最大的事件e。继续添加到B桶,直到B桶的总分钟数不超过A。

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

继续重复上述过程,直到完成活动。

这只会工作,因为你的每个桶有相同的长度,180分钟。

实际上,因为你有这个4-5pm的规则,任何额外的事件都会留在最后。他们都会在一个桶里,这将是下午的桶。如果由于某种原因你有一个大于180分钟的事件,那么这将会预订下午。然后,如果你在早晨(从最大到最小)尽可能多的话,那么其余的就会在下午去。

+0

@ G.Bach他解释了4:89意味着什么。活动4是89分钟。 – Luminous

+0

假设你有两个100和80分钟的时间窗口,以及作业[1:50,2:50,3:80],那么如果我理解正确,那么这个算法将失败。 –

+0

好吧,我错过了这一点。我以为你有无限的日子像牙医。你希望这一切都能在一天内完成......就像一个会议! – ergonaut