【问题标题】:Combination with elements never in the same group more than once与同一组中的元素组合不超过一次
【发布时间】:2018-02-21 15:46:30
【问题描述】:

有一群14 人。我们想设置一个会议时间表,以便所有14 的人每周以3 为一组(和一组2)聚会。

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

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

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

这个问题有很多可能的解决方案。在用尽所有组合之前,我们可以见面多少周?如何在R 中编码?

【问题讨论】:

    标签: r algorithm combinations combinatorics


    【解决方案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" 
    

    【讨论】:

      【解决方案2】:

      嗯,这是一个下限:

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

      每个人需要认识 13 个人。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-27
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        相关资源
        最近更新 更多