处理以最有效地填充 6 排 21 个座位的不同团体大小
Process to most efficiently fill 6 rows of 21 seats with various group sizes
我在建筑物中有 6 排 21 把椅子和一个预订系统,不同规模的团体可以预订,为了保持社交距离,每个团体之间需要 2 把椅子。我们希望容纳尽可能多的人,但要保持公平,以便较晚预订的较小团体不会抢占较早预订的较大团体。他们不必按时间顺序就座。最后,虽然尝试预订多人可能会被拒绝,因为没有 space 容纳他们,但如果他们合适,可以接受之后进行的单次预订。
我几乎已经实现了上述所有目标,但还不完全...这就是我的流程(我可以在这里添加很多代码,但我并不是真的在追求代码,而是我需要解释我不太明白要更改什么。我希望没关系):
目前为止的预订按时间顺序排列
遍历从 21 开始的每一行
对于每个预订,检查团体人数 + 2 是否合适。如果他们这样做,将它们添加到该行数组,将它们从预订数组中删除,并将剩余的座位数减少组大小 + 2。这样做直到没有剩余的预订适合该行。
如果剩余座位为 0,则行末将有 2 个不必要的 'buffer' 座位,但即使是 1 人的团体也无法容纳 2 组座位和前一组,所以忽略这个事实并继续前进。
如果剩余座位多于 0,则再次检查剩余预订,看看是否有任何团体适合不添加 2 个座位缓冲区。如果他们这样做,将它们添加到行数组,将它们从预订数组中删除并打破循环并移动到下一行。
希望你能遵循我的逻辑。它工作得很好,但它并没有以最有效的方式填充行。预订不需要按时间顺序排列,但我们不能让之前的预订被更小、更近期的预订排挤,因为它们的匹配效率更高。
有没有人有什么要说的?我的大脑在融化!
由于添加小组比添加大组更容易,因此您应该先放置大组。
假设情况是这样的:您当前有一个适合的组列表。突然,一个新的 G 组尝试预订。通过按大小对所有组进行排序并将最大的组放在前面,最小的放在最后,尝试适应新组。如果此操作有效,请接受新安置的 G 的新预订。但如果这导致较早的组不再适合,则拒绝新组 G 并保留旧位置。
当你因为装不下一个组而拒绝时,你也可以在内存中保留那个组的大小;下次有同等人数或更大人数的团体尝试预订时,您可以立即拒绝他们,因为您知道自己不适合这个人数。
我在建筑物中有 6 排 21 把椅子和一个预订系统,不同规模的团体可以预订,为了保持社交距离,每个团体之间需要 2 把椅子。我们希望容纳尽可能多的人,但要保持公平,以便较晚预订的较小团体不会抢占较早预订的较大团体。他们不必按时间顺序就座。最后,虽然尝试预订多人可能会被拒绝,因为没有 space 容纳他们,但如果他们合适,可以接受之后进行的单次预订。
我几乎已经实现了上述所有目标,但还不完全...这就是我的流程(我可以在这里添加很多代码,但我并不是真的在追求代码,而是我需要解释我不太明白要更改什么。我希望没关系):
目前为止的预订按时间顺序排列
遍历从 21 开始的每一行
对于每个预订,检查团体人数 + 2 是否合适。如果他们这样做,将它们添加到该行数组,将它们从预订数组中删除,并将剩余的座位数减少组大小 + 2。这样做直到没有剩余的预订适合该行。
如果剩余座位为 0,则行末将有 2 个不必要的 'buffer' 座位,但即使是 1 人的团体也无法容纳 2 组座位和前一组,所以忽略这个事实并继续前进。
如果剩余座位多于 0,则再次检查剩余预订,看看是否有任何团体适合不添加 2 个座位缓冲区。如果他们这样做,将它们添加到行数组,将它们从预订数组中删除并打破循环并移动到下一行。
希望你能遵循我的逻辑。它工作得很好,但它并没有以最有效的方式填充行。预订不需要按时间顺序排列,但我们不能让之前的预订被更小、更近期的预订排挤,因为它们的匹配效率更高。
有没有人有什么要说的?我的大脑在融化!
由于添加小组比添加大组更容易,因此您应该先放置大组。
假设情况是这样的:您当前有一个适合的组列表。突然,一个新的 G 组尝试预订。通过按大小对所有组进行排序并将最大的组放在前面,最小的放在最后,尝试适应新组。如果此操作有效,请接受新安置的 G 的新预订。但如果这导致较早的组不再适合,则拒绝新组 G 并保留旧位置。
当你因为装不下一个组而拒绝时,你也可以在内存中保留那个组的大小;下次有同等人数或更大人数的团体尝试预订时,您可以立即拒绝他们,因为您知道自己不适合这个人数。