事件的调度算法

Event's scheduling algorithm

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

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

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

编辑

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

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

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

然后重复以上,(A换B)

不断重复以上步骤,直到您完成活动。

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

实际上,由于您有这个下午 4 点到 5 点的规则,任何额外的事件都将在最后留下。它们都放在一个桶里,这将是下午的桶。如果出于某种原因,您的活动超过 180 分钟,那么将预订下午。然后如果你早上能装多少(从大到小),那么剩下的下午就可以了。