我想为二分图(N = M = 200)创建一个(N * M) - 置信矩阵。 但是,必须考虑以下限制:
到目前为止我已经
了(31*100+2*10)/(31+2)
有人有解决方案吗?
答案 0 :(得分:0)
这是实现你想要的一种方式。首先是算法的想法,然后是R
中的实现。
你想要一个0和1的矩阵,每行加起来为10,每列加起来为10。
第1步:首先,创建一个简单的解决方案,如下所示: 对于前10个元素,前10行有1个,然后是190个零。 第二组十行从第11个元素到第20个元素依次为1,依此类推。 换句话说,一个可行的解决方案是拥有一个所有0的200x200矩阵,其中10x10 1的密集矩阵对角嵌入,20次。
第2步:随机播放整行和整列。 在此shuffle中,将保留rowSum和columnSums。
我使用较小的16x16矩阵来演示。在这种情况下,让我们说我们希望每行和每列加起来为4.(此colsum必须是整数可以被大整数矩阵维整除。)
n <- 4 #size of the smaller square
i <- c(1,1,1,1) #dense matrix of 1's
z <- c(0,0,0,0) #dense matrix of 0's
#create a feasible solution to start with:
m <- matrix(c(rep(c(i,z,z,z),n),
rep(c(z,i,z,z),n),
rep(c(z,z,i,z),n),
rep(c(z,z,z,i),n)), 16,16)
#shuffle (Run the two lines following as many times as you like)
m <- m[sample(16), ] #shuffle rows
m <- m[ ,sample(16)] #shuffle columns
#verify that the sum conditions are not violated
colSums(m); rowSums(m)
#solution
print(m)
希望能帮助您推进二分图。