与元素的组合永远不会在同一组中

时间:2018-02-21 15:46:31

标签: r algorithm combinations combinatorics

有一群14人。我们希望设置一个会议日程安排,以便所有14人每周以3(以及一组2)小组聚在一起。

但是,我不希望同一组中的任何两个人不止一次。

例如,如果我有一组c(A,B,C),我不希望后续组为c(A,B,D),因为元素AB是相同的。

输出应该是一个列表,列表中的每个元素代表给定的一周。然后在每个列表元素(星期)内应该有四个三人组和一组两个人的列表,每个人只出现一次,并且在几周内没有两个人出现在同一组中。

此问题有许多可能的解决方案集。在所有组合用尽之前我们可以见多少周?如何在R

中对此进行编码

2 个答案:

答案 0 :(得分:1)

elements <- c('A','B','C','D','E','F','G','H','I','J','K','L','M','N')
allcomb <- t(combn(elements, 3)) #Returns 364 different combinations

可以过滤具有2个相似字母的那些。但是,答案会根据您开始比较的子组而变化。我是按顺序进行的。(从A,B,C开始)

for (a in 1:28){
  l <- vector("list", nrow(allcomb))
  for (b in 1:nrow(allcomb)){
    l[[b]] <- sum(allcomb[a,] %in% allcomb[b,])!=2
    }
  allcomb <- allcomb[unlist(l),]
}

经过反复试验后得到28分。

> allcomb
      [,1] [,2] [,3]
 [1,] "A"  "B"  "C" 
 [2,] "A"  "D"  "E" 
 [3,] "A"  "F"  "G" 
 [4,] "A"  "H"  "I" 
 [5,] "A"  "J"  "K" 
 [6,] "A"  "L"  "M" 
 [7,] "B"  "D"  "F" 
 [8,] "B"  "E"  "G" 
 [9,] "B"  "H"  "J" 
[10,] "B"  "I"  "K" 
[11,] "B"  "L"  "N" 
[12,] "C"  "D"  "G" 
[13,] "C"  "E"  "F" 
[14,] "C"  "H"  "K" 
[15,] "C"  "I"  "J" 
[16,] "C"  "M"  "N" 
[17,] "D"  "H"  "L" 
[18,] "D"  "I"  "M" 
[19,] "D"  "J"  "N" 
[20,] "E"  "H"  "M" 
[21,] "E"  "I"  "L" 
[22,] "E"  "K"  "N" 
[23,] "F"  "H"  "N" 
[24,] "F"  "J"  "L" 
[25,] "F"  "K"  "M" 
[26,] "G"  "I"  "N" 
[27,] "G"  "J"  "M" 
[28,] "G"  "K"  "L" 

答案 1 :(得分:0)

这是一个下限:

平均每个人预计会遇到(4 * 3 + 1 * 2)/ 5 =每周2.8人

每个人需要遇到13个人。

13 / 2.8 = 4.64周。 所以答案应该是5周。