我有一个事件列表,每个事件都有一个持续时间。 我正在寻找一种算法来安排这些事件一天。从上午9点到下午12点,然后从下午1点到下午4点,不迟于下午5点。
我不确定解决这个问题的好方法。 由于可能有几种可能的解决方案,我首先想到的是测试随机组合的正确性。
我想知道是否有更确定的解决方法。 谢谢;)
修改
@svs 事件的时间以分钟为单位,任何事件都不应重叠。 除了午休时间从中午12点到下午1点之外,活动之间不需要暂停。
答案 0 :(得分:0)
好的,因为你基本上有两个相同的时隙桶,你可以基本上按顺序安排它们,无论顺序如何,并假设有一个解决方案,看看你怎么能把它们连接起来。从桶A和B开始。
将最大的事件e1放入存储桶A. 然后将下一个最大的事件e2放入桶B. 将最大的事件放在桶B中,最多为e1-e2分钟。继续添加到桶B,直到桶B的总分钟数不超过A.
然后重复上述步骤(将A切换为B)。
在完成活动之前,请继续重复上述步骤。
这只会起作用,因为你的每个桶都有相同的长度,180分钟。
实际上,因为你有这个4-5pm规则,所以任何额外的事件将在最后留下。他们都将进入一个桶,这将是下午的桶。如果由于某种原因你有一个>的事件180分钟,然后那将预订下午。然后,如果你在早上(从大到小)尽可能多地适合,那么其余的将在下午进行。