Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 分组组合算法_Algorithm_Combinatorics - Fatal编程技术网

Algorithm 分组组合算法

Algorithm 分组组合算法,algorithm,combinatorics,Algorithm,Combinatorics,我侄子有一家新公司,它把生意人团结在一起喝咖啡和聊天。有点像音乐椅。经过一定的时间后,每个人都会站起来,并移动到不同的桌子。这个想法是每个人都必须有机会与每个人交谈。他试图找出如何做到这一点,16个人和4张桌子,每个人移动5次 我想找出一个算法来实现这一点,但我发现这个问题比我最初想象的更具挑战性。为了简化它,我想出了如何用6个人和3张桌子来完成它。它可以表示为: Step 1: (1, 2), (3, 4), (5, 6) Step 2: (1, 3), (2, 5), (4, 6) Step

我侄子有一家新公司,它把生意人团结在一起喝咖啡和聊天。有点像音乐椅。经过一定的时间后,每个人都会站起来,并移动到不同的桌子。这个想法是每个人都必须有机会与每个人交谈。他试图找出如何做到这一点,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张桌子,那么会有两个人多次坐在同一张桌子上。当然,该算法的思想是让每个人在最短的步数内至少会面一次。

这称为。该链接指向16人、4张桌子的案例的解决方案,此处复制

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

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

pé,我看到您也对APL感兴趣,因此您可能希望使用APL算法来实现这一点:


以下是您要寻找的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并替换为比尔·琼斯。对其他人也一样

有许多方法可以重新安排日期、时间元素和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.

谢谢我本来想找到我自己的解决办法,但我会查出来的。为了用PHP解决这个问题,我必须找到一个扩展的逐位算法。所以,当我开始学习APL时,我很高兴地发现expand已经构建了它。哦,好吧,我在HPH做这件事一定很痛苦!这就是我如此喜欢APL的原因:)