我侄子有一项新业务,将商务人士聚集在一起喝咖啡、交流。这有点像音乐椅游戏,每过一个固定的时间,每个人都要站起来到另一个桌子上去。这个想法是让每个人都有机会和每个人交谈。他正在尝试用16个人和4张桌子的方式实现,每个人要移动5次。
我本来想设计一个算法来解决这个问题,但发现这个问题比我最初想象的更加具有挑战性。为了简化问题,我先解决了只有6个人和3张桌子的情况。它可以表示如下:
我本来想设计一个算法来解决这个问题,但发现这个问题比我最初想象的更加具有挑战性。为了简化问题,我先解决了只有6个人和3张桌子的情况。它可以表示如下:
Step 1: (1, 2), (3, 4), (5, 6)
Step 2: (1, 3), (2, 5), (4, 6)
Step 3: (1, 4), (2, 6), (3, 5)
Step 4: (1, 5), (2, 4), (3, 6)
Step 5: (1, 6), (2, 3), (4, 5)
一种可能性是生成所有可能的组合,然后排除任何彼此矛盾的组合,但这并不是非常有效的方法。对于奇数组合,这是不可能的。例如,如果有6个人只有2张桌子,那么会有两个人坐在同一张桌子上超过一次。当然,算法的目的是让每个人在最短的步骤中至少见面一次。