用于将人员分配到组的组合算法

时间:2012-09-25 15:49:50

标签: algorithm combinatorics

一位同事带着一个有趣的问题来找我,一个与她所参与的“城里新人”小组有关的实用问题。

18位朋友希望在接下来的4天里分别为小组共进晚餐。规则如下:

  1. 每天该小组将分为4组,每组4人。
  2. 任何一对人在4天的过程中最多只会见一次。
  3. 任何给定的人最多只能参加2人一组。
  4. 对一组有效的组分配进行强力递归搜索显然是不切实际的。我已经抛出一些简单的逻辑来尽快修剪树的部分,但还不足以使它变得实用。

    实际上,我开始怀疑遵循所有规则可能是不可能的,但我无法提出一个组合论证,为什么会这样。

    有什么想法吗?

1 个答案:

答案 0 :(得分:4)

可以使用两个mutually orthogonal latin squares订单将16个朋友安排4x4连续4晚4.将每个朋友分配到4x4网格中的不同位置。在第一个晚上,一排一排。在第二个,按列分组。在第三个,在拉丁方#1中的类似条目分组(4x4示例中的卡级别)。在第四个,在拉丁方#2中的类似条目(4x4示例中的卡套装)。实际上,仿射平面构造产生了三个相互正交的拉丁方格,因此可以安排第五晚,确保每对朋友只会遇到一次。

也许16岁的时间表可以延长,使用未使用的第五夜的自由。

编辑:这是超过5晚的16人的日程安排。每排都是一个晚上。每列都是一个人。该条目是他们被分配到的组。

[0, 0, 0, 0,  1, 1, 1, 1,  2, 2, 2, 2,  3, 3, 3, 3]
[0, 1, 2, 3,  0, 1, 2, 3,  0, 1, 2, 3,  0, 1, 2, 3]
[0, 1, 2, 3,  1, 0, 3, 2,  2, 3, 0, 1,  3, 2, 1, 0]
[0, 2, 3, 1,  1, 3, 2, 0,  2, 0, 1, 3,  3, 1, 0, 2]
[0, 3, 1, 2,  1, 2, 0, 3,  2, 1, 3, 0,  3, 0, 2, 1]