我想n在m箱子中生成一组球的排列.以下嵌套列表集生成这些排列.
n <- 3
m <- 4
v <- rep(0,m)
for (i in n:0){
for (j in (n-sum(i)):0){
for (k in (n-sum(i,j)):0){
for (l in (n - sum(i,j,k)):0){
v <- c(i,j,k,l)
print(v)
if (sum(v) == n){ break }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
打印解决方案:
[1] 3 0 0 0
[1] 2 1 0 0
[1] 2 0 1 0
[1] 2 0 0 1
[1] 1 2 0 0
[1] 1 1 1 0
[1] 1 1 …Run Code Online (Sandbox Code Playgroud) 在订单确实重要的情况下,生成所有可能结果的矩阵相当容易.这样做的一个方法是使用expand.grid如图所示这里.
如果没有怎么办?
如果我是对的,可能的组合的数量是(S+N-1)!/S!(N-1)!,其中S是骰子的数量,每个都具有编号为1到N的N个边.(它与众所周知的组合公式不同,因为可能出现相同的数字在不止一个骰子上).例如,当投掷四个六面骰子时,N = 6且S = 4,所以可能组合的数量是(4 + 6-1)!/ 4!(6-1)!= 9!/ 4!x5!= 126.如何生成这126种可能结果的矩阵?
谢谢.