我有一份人员名单:
A 列:
person A,
person A guest,
person B,
person C,
person C guest,
...
B 列:
1,
1,
2,
3,
3,
...
因此,A 列是此人的姓名,B 列为每个人提供一个唯一的 ID(其客人的 ID 相同,因此我们知道他们是在一起的)。
现在假设我们有 100 人的名单(还请注意,并非每个人都有客人),我们必须为他们安排座位。我们有一张桌子的列表(例如 10 * 4 人桌和 10*6 人桌)。我们必须随机分配每个人到一张桌子,客人也坐在同一张桌子上。
最好的方法是什么?(还需要我可以连续 4 次生成此结果而不会产生相同的结果,因此当在餐厅的 4 道菜期间,人们换桌子但不会失去他们的客人)。
答案1
首先,执行 countif 并确定每个人所需的座位总数。其次,按人数从高到低对人数进行排序。第三,由于您没有提供桌子限制列表,因此将最大的组分配到最大的桌子,然后尝试用匹配的人数总数填充剩余的座位,然后继续下一个桌子。
例如:6 人桌为 4 人组加 2 人组或者2 组,每组 3 人。
由于团体之间可能会互相交谈。请尽量避免将单人房安排在人数超过 2 人的团体中。
如果您可以提供座位限制列表(每张桌子的桌子数和座位数),则此建议可能会有所改进。