我的侄子有一项新业务,该业务将商务人士团结起来喝咖啡和交谈。这有点像音乐椅。在给定的时间后,每个人都起身到不同的桌子上。这个想法是每个人都必须有机会与每个人交谈。他试图弄清楚如何使用 16 个人和 4 张桌子,每个人移动 5 次。
我想找出一种算法来做到这一点,但我发现这个问题比我一开始想象的更具挑战性。为了简化它,我想出了如何用 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 张桌子,那么会有两个人不止一次坐在同一张桌子上。当然,算法的想法是让每个人在最短的步骤中至少见面一次。