【发布时间】:2013-07-04 04:13:03
【问题描述】:
给定一个大小为M 和N 的矩阵,我们希望用整数值 (>=0) 填充每一行,使其总和为某个值。
请注意M 和N 的维度是使用特定公式预先计算的,因此可以保证在给定所需条件(即下面的 sum_val)的情况下匹配填充。
这是在 R 中的 Partition library 下实现的。
library(partitions)
# In this example, we impose condition
# that each rows must sum up to 2 in total
# And each row has 5 columns
sum_val <- 2
n <- 5
#The above two parameters are predefined.
t(as.matrix(compositions(sum_val, n)))
[,1] [,2] [,3] [,4] [,5]
[1,] 2 0 0 0 0
[2,] 1 1 0 0 0
[3,] 0 2 0 0 0
[4,] 1 0 1 0 0
[5,] 0 1 1 0 0
[6,] 0 0 2 0 0
[7,] 1 0 0 1 0
[8,] 0 1 0 1 0
[9,] 0 0 1 1 0
[10,] 0 0 0 2 0
[11,] 1 0 0 0 1
[12,] 0 1 0 0 1
[13,] 0 0 1 0 1
[14,] 0 0 0 1 1
[15,] 0 0 0 0 2
C++ 中有没有现成的实现?
【问题讨论】:
-
你的意思是你需要满足你的约束的随机值?试试this
-
@LeeDanielCrocker:不只是任何随机数组合。它必须是详尽的。
-
啊,所以你想要每个分区,随机顺序,还是某个预定义的顺序?
-
@LeeDanielCrocker:每个分区,都不需要顺序。
-
文森特说得对,如下。可以通过取连续差分从 n-1 个组合中计算出 n 个分区。
标签: c++ r math combinatorics