处理以最有效地填充 6 排 21 个座位的不同团体大小

Process to most efficiently fill 6 rows of 21 seats with various group sizes

我在建筑物中有 6 排 21 把椅子和一个预订系统,不同规模的团体可以预订,为了保持社交距离,每个团体之间需要 2 把椅子。我们希望容纳尽可能多的人,但要保持公平,以便较晚预订的较小团体不会抢占较早预订的较大团体。他们不必按时间顺序就座。最后,虽然尝试预订多人可能会被拒绝,因为没有 space 容纳他们,但如果他们合适,可以接受之后进行的单次预订。

我几乎已经实现了上述所有目标,但还不完全...这就是我的流程(我可以在这里添加很多代码,但我并不是真的在追求代码,而是我需要解释我不太明白要更改什么。我希望没关系):

  1. 目前为止的预订按时间顺序排列

  2. 遍历从 21 开始的每一行

希望你能遵循我的逻辑。它工作得很好,但它并没有以最有效的方式填充行。预订不需要按时间顺序排列,但我们不能让之前的预订被更小、更近期的预订排挤,因为它们的匹配效率更高。

有没有人有什么要说的?我的大脑在融化!

由于添加小组比添加大组更容易,因此您应该先放置大组。

假设情况是这样的:您当前有一个适合的组列表。突然,一个新的 G 组尝试预订。通过按大小对所有组进行排序并将最大的组放在前面,最小的放在最后,尝试适应新组。如果此操作有效,请接受新安置的 G 的新预订。但如果这导致较早的组不再适合,则拒绝新组 G 并保留旧位置。

当你因为装不下一个组而拒绝时,你也可以在内存中保留那个组的大小;下次有同等人数或更大人数的团体尝试预订时,您可以立即拒绝他们,因为您知道自己不适合这个人数。