通缉:(伪)代码,用于以保留行和列总数的方式舍入矩阵。
问题始于非负整数的向量X
和Y
,Sum[X]==Sum[Y]
。想要在保留行和列总数的同时舍入X×Y/Sum[X]
。
这是一种婚姻问题。 Xa
需要进行一些握手(称之为Xa
),Xb
和Xc
也是如此;还有Ya
Yb
Yc
。无论出于何种原因,所有的握手都在X和Y之间。当然Xa + Xb + Xc == Ya + Yb + Yc
。握手应尽可能地按比例进行。因此,希望舍入X×Y/Sum[X]
,不改变行和列总数。
虽然http://people.mpi-inf.mpg.de/~doerr/papers/unbimatround.pdf 似乎是答案,它既没有算法也没有代码。
请亲切的读者,是否有已发布的代码或伪代码?甚至是算法的清晰解释?
答案 0 :(得分:1)
你发表的论文说,矩阵的随机舍入,很有可能满足你的约束。在论文中,它可以在O(nml)
中计算,其中l
是用于对矩阵进行随机化的位数。因此,概率不能取决于矩阵大小或使用的位。
请尝试以下算法:
1. For all x in your matrix do
r = random float number in [0,1]
if r <= x - floor(x) then
x := ceil(x);
else
x := floor(x);
2. check if the randomized rounded matrix fulfill the constrains.
if so then end the algorithm
else try again.
根据该论文,这不应该采取太多的尝试。