【问题标题】:Randomly pairing elements of a vector in R to count unique arrangements随机配对 R 中向量的元素以计算唯一排列
【发布时间】:2018-03-17 15:16:47
【问题描述】:

背景:

this combinatorics question,问题是如何确定样本空间:8 支不同足球队在下一轮比赛中的配对方式。针对这部分问题提出了两个不同的答案:28(参见 cmets OP)和 105(参见 OP 中的编辑和答案)。

我想手动执行此操作,以尝试找出不正确答案中的错误。


我尝试过的:

teams = 1:8
names(teams) = c("RM", "BCN", "SEV", "JUV", "ROM", "MC", "LIV", "BYN")
split(sample(teams), rep(1:(length(teams)/2), each=2))

不幸的是,输出是一个列表,我希望一个向量能够运行类似的东西:

unique(...,MARGIN=2)

有没有一种优雅的方式来做到这一点?


在现在删除答案(谢谢)之后,我会选择

a <- replicate(1e5, unlist(split(sample(teams), rep(1:(length(teams)/2), each=2))))

模拟 100,000 个随机样本,然后运行

unique(a, MARGIN = 2)

但是我如何解释这样一个事实,即 4 对对手的顺序无关紧要,例如 LIV-BYNBYN-LIV 是相同的配对(尽管有场上优势)?

【问题讨论】:

  • “取消列出”对您的问题有用吗?

标签: r combinations


【解决方案1】:
> u = ncol(unique(replicate(1e6, unlist(split(sample(teams), rep(1:(length(teams)/2), each=2)))), MARGIN = 2))
> u / (factorial(4) * 2^4)
[1] 105

unlist的想法来自@宋正毅,如果他的回答不删,我就采纳。完整的答案在上面的几行中。

u需要除以4!因为

BCN-RM, BYN-SEV, JUV-ROM, LIV-MC

完全一样

LIV-MC, BCN-RM, BYN-SEV, JUV-ROM

BCN-RM, LIV-MC, BYN-SEV, JUV-ROM

等等

2^4 一词是为了避免过度计数,因为对于每一个可能的独特抽奖,每一对都可以毫无损失地翻转(丢弃场优势):BCN-RMRM-BCN 相同,并且有每次抽签是 4 对。


如果考虑场地优势(现实生活)...

> u/factorial(4)
[1] 1680

我们最终得到了 1,680 次可能的平局。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多