我将以两种不同的方式解释我的问题,请选择你更了解的问题。如果有什么不清楚的地方,请在评论中告诉我。
版本1
为了试图让它更清楚,我将从另一个角度解释同样的问题:
我有一个包含5列和3行的二进制矩阵:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 0 0
[2,] 0 0 1 1 0
[3,] 0 0 0 1 1
我对(几乎)此矩阵的所有版本感兴趣,只通过置换行。有一个约束:我只想要每个列至少有一个列的排列。如上所述,我已经计算出有370种可能性,每列中保持一个1或1个行维持行。我的问题是,是否有可能获得这些矩阵而不必经历所有1000种可能的排列?
版本2
我想计算一些概率,因为我有3个元素表,每10个列需要组合。
Table 1: combn(5,3) -> 10 combinations
> combn(5,3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 1 1 2 2 2 3
[2,] 2 2 2 3 3 4 3 3 4 4
[3,] 3 4 5 4 5 5 4 5 5 5
Table 2 & 3: combn(5,2) -> 10 combinations
> combn(5,2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 2 2 2 3 3 4
[2,] 2 3 4 5 3 4 5 4 5 5
现在我需要拥有所创建组的所有组合,但只需要包含至少一次所有可能元素的组合(1,2,3,4,5)。有1000种可能的组合,我只对370感兴趣。
我能想到的唯一解决方案是运行所有可能的组合(使用expand.grid()
并检查是否所有元素都存在。我希望有一个更简单的解决方案。同时这个例子并不构成要计算很麻烦,一旦数量增加,我可以节省大量的计算时间,如果我只能直接获得我所讨论的组合。