使用 R 进行分区和排列
Partition and permutation using R
我正在尝试使用 R 将 M 的所有可能分区(包括 0)找到 N 个部分。然后,我想在不替换且不重复的情况下排列每个结果。
例如,对于 M=4 和 N=2,我想得到:
[1,] 4 3 2 0 1
[2,] 0 1 2 4 3
现在,我可以得到:
[1,] 4 3 2
[2,] 0 1 2
使用partitions::restrictedparts(4, 2, include.zero=TRUE)
。我该如何继续?
为了给出这个问题的一些背景知识,我实际上是想找出掷骰子 60 次后每一面出现次数的所有可能结果。
您当前使用的包中有一个可用的函数(即 partitions
),它可以满足您的需求。它被恰当地称为 compositions
(有关详细信息,请参阅 Composition (combinatorics))。
partitions::compositions(4, 2)
[1,] 4 3 2 1 0
[2,] 0 1 2 3 4
现在,为了解决您的实际问题,我们有:
myParts <- partitions::compositions(60, 6) ## Note that include.zero is TRUE by default
dim(myParts)
[1] 6 8259888
这是输出:
transMat <- t(as.matrix(myParts))
head(transMat)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 60 0 0 0 0 0
[2,] 59 1 0 0 0 0
[3,] 58 2 0 0 0 0
[4,] 57 3 0 0 0 0
[5,] 56 4 0 0 0 0
[6,] 55 5 0 0 0 0
tail(transMat)
[,1] [,2] [,3] [,4] [,5] [,6]
[8259883,] 1 0 0 0 0 59
[8259884,] 0 1 0 0 0 59
[8259885,] 0 0 1 0 0 59
[8259886,] 0 0 0 1 0 59
[8259887,] 0 0 0 0 1 59
[8259888,] 0 0 0 0 0 60
我正在尝试使用 R 将 M 的所有可能分区(包括 0)找到 N 个部分。然后,我想在不替换且不重复的情况下排列每个结果。
例如,对于 M=4 和 N=2,我想得到:
[1,] 4 3 2 0 1
[2,] 0 1 2 4 3
现在,我可以得到:
[1,] 4 3 2
[2,] 0 1 2
使用partitions::restrictedparts(4, 2, include.zero=TRUE)
。我该如何继续?
为了给出这个问题的一些背景知识,我实际上是想找出掷骰子 60 次后每一面出现次数的所有可能结果。
您当前使用的包中有一个可用的函数(即 partitions
),它可以满足您的需求。它被恰当地称为 compositions
(有关详细信息,请参阅 Composition (combinatorics))。
partitions::compositions(4, 2)
[1,] 4 3 2 1 0
[2,] 0 1 2 3 4
现在,为了解决您的实际问题,我们有:
myParts <- partitions::compositions(60, 6) ## Note that include.zero is TRUE by default
dim(myParts)
[1] 6 8259888
这是输出:
transMat <- t(as.matrix(myParts))
head(transMat)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 60 0 0 0 0 0
[2,] 59 1 0 0 0 0
[3,] 58 2 0 0 0 0
[4,] 57 3 0 0 0 0
[5,] 56 4 0 0 0 0
[6,] 55 5 0 0 0 0
tail(transMat)
[,1] [,2] [,3] [,4] [,5] [,6]
[8259883,] 1 0 0 0 0 59
[8259884,] 0 1 0 0 0 59
[8259885,] 0 0 1 0 0 59
[8259886,] 0 0 0 1 0 59
[8259887,] 0 0 0 0 1 59
[8259888,] 0 0 0 0 0 60