以下代码/原因在哪里?
如果我有item
件物品,并且我想计算<div class="description text-left" v-for="item in siteObject.line_info">
<small>{{item.lineid}}</small>
<small>{{item.site_site_id}}</small>
<small>{{item.site_id}}</small>
</div>
替换为的抽奖的组合数量(即顺序无关紧要),我可以使用二项式系数:
n
当我想计算元素k
不属于抽奖的可能性时,我会使用
choose(n + k - 1, k)
(基本上,我可以选择的选项较少)。
例如使用i
时,我有以下choose(n + k - 1 - 1, k)
(n=3, k= 3
)抽奖:
10
以下元素choose(3 + 3 - 1, 3)
(# AAA, AAB, ABB, BBB, BBC, BCC, CCC, CCA, CAA, ABC
)不出现元素'A'
(例如):
4
到目前为止,一切都很好。因此,我可以计算出我在choose(3 + 3 - 1 - 1, 3)
上没有出现# BBB, BBC, BCC, CCC
的情况下抽奖的可能性:
n = k
因此,如果我模拟绘制(使用i
)并重复freeFromCounts <- function(n) choose(2 * n - 2, n)
totalCounts <- function(n) choose(2 * n - 1, n)
ratio <- function(n) freeFromCounts(n) / totalCounts(n) ## (n - 1) / (2 * n - 1)
次,这就是我的问题,那么我期望看到sample(.)
绘制在元素n.rep
所在的位置(例如)不存在。但是,事实并非如此。我的错误在哪里?
n.rep * ratio(n)
答案 0 :(得分:1)
一位同事找到了解决方案。 sample
采样不是无序而是有序,即[1, 2, 3]
和[3, 2, 1]
之间有区别。有了这些知识,数字是相同的:9 ^ 10 / 10 ^ 10 = 0.3486784
。
因此,要对原始问题进行仿真,您必须提出sample
的变体,该变体进行无序采样。 Idea正在遵循著名的无序抽样替换公式推导(例如http://mathworld.wolfram.com/Multichoose.html)
sampleUnordered <- function(n, k) {
aS <- rep(0, n + k -1)
aS[!seq_along(aS) %in% sample(n + k - 1, k)] <- seq.int(n-1)
rl <- rle(aS)
zeros <- which(rl$values == 0)
good <- rl$lengths[zeros]
nr <- c(rl$values, n)[zeros + 1]
rep(nr, good)
}
sim <- function(n, n.rep = 10000, x0 = 1) {
sum(replicate(n.rep, {
s <- sampleUnordered(n, n)
all(s != x0)
})) / n.rep
}
set.seed(12)
sim(10, 1e6) # [1] 0.473234