分组合算法

时间:2013-05-12 21:07:52

标签: algorithm combinatorics

我的侄子有一项新业务,将商界人士聚在一起喝咖啡和谈话。这有点像音乐椅。经过一段时间后,每个人都会起床到另一张桌子。这个想法是每个人都有机会与每个人交谈。他试图弄清楚如何用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个桌子,那么将有两个人不止一次坐在同一张桌子上。当然,算法的想法是让每个人在最短的步骤中至少相遇一次。

3 个答案:

答案 0 :(得分:7)

这称为social golfer problem。该链接转到了16人4桌案例的解决方案,转载于此。

ABCD EFGH IJKL MNOP
AEIM BFJN CGKO DHLP
AFKP BELO CHIN DGJM
AGLN BHKM CEJP DFIO
AHJO BGIP CFLM DEKN

这个问题一般很难;通过不适用于所有参数设置的数学结构或通过冗长的约束满足计算找到解决方案。

答案 1 :(得分:1)

Pé,我看到你也对APL感兴趣,所以你可能想要一个APL算法来做到这一点:

http://dfns.dyalog.com/n_pmat.htm

答案 2 :(得分:0)

以下是您正在寻找的 6人组 ...

Session 1   Table 1   #1  &  #6   
Session 1   Table 2   #2  &  #5    
Session 1   Table 3   #3  &  #4   

Session 2   Table 1   #2  &  #3   
Session 2   Table 2   #6  &  #4   
Session 2   Table 3   #5  &  #1   

Session 3   Table 1   #3  &  #5   
Session 3   Table 2   #4  &  #1   
Session 3   Table 3   #6  &  #2   

Session 4   Table 1   #2  &  #4   
Session 4   Table 2   #1  &  #3    
Session 4   Table 3   #5  &  #6   

Session 5   Table 1   #4  &  #5   
Session 5   Table 2   #3  &  #6   
Session 5   Table 3   #1  &  #2   

复制&将上面的列表粘贴到您自己的文字处理器中,然后使用 搜索和替换将数字更改为名称。

如果他们每周见面一次,则需要5周才能见面一次。 如果他们在一天见面,每次会议持续15分钟, 你需要5到15分钟的课程(总共1小时15分钟)。 您还可以为每个会议添加日期,时间和地点。 如果您的会议持续时间超过5周,只需复制堆栈即可 再做5周的会议。

对于 16人组,并且所有16人与其他15人见面一次,您将需要8个表,并且可以使用10或15分钟的会话。所有16个人将一对一地与其他15名参与者进行一对一会面。 第一和第二次会议将如下所示:

Session  1  Table  1   #1  &  #2
Session  1  Table  2   #3  &  #4
Session  1  Table  3   #5  &  #6
Session  1  Table  4   #7  &  #8
Session  1  Table  5   #9  &  #10
Session  1  Table  6   #11  &  #12
Session  1  Table  7   #13  &  #14
Session  1  Table  8   #15  &  #16

Session  2  Table  1   #10  &  #5
Session  2  Table  2   #4  &  #1
Session  2  Table  3   #2  &  #6
Session  2  Table  4   #12  &  #7
Session  2  Table  5   #8  &  #3
Session  2  Table  6   #14  &  #9
Session  2  Table  7   #16  &  #11
Session  2  Table  8   #13  &  #15

Continues Sessions 3 thru 15 

16人轮换组非常大。会议时间可以 缩短为10分钟,这需要15节10分钟 每次超过2:30的时间框架,或在两天或更长时间内展开。 在构建轮换计划后,最后一件事是分配实际 名称使用全球搜索&更换。将光标放在列表顶部 搜索#1 并替换为 Bill Jones 。为其他人做同样的事情。

有许多方法可以重新安排16个元素的日期,时间元素 像这样的循环队建设日程。以下是一个例子 什么完成的单行看起来像。

Dec 16 Monday
Session  1  Table  1  9:00am  Bill Jones & Fred Johnson
Session  1  Table  2  9:00am  Jack Wilson & Sarah Ford
Session  1  Table  3  9:00am  Larry Peterson & Sue Falvey 
etc.