1
有很多关于加权随机的SO问题,但所有这些问题都依赖于最高数目的偏差。我想偏向最低点。随机选择加权最低
我现在的算法是随着偏向于更高值而随机加权的。
double weights[2] = {1,2};
double sum = 0;
for (int i=0;i<2;i++) {
sum += weights[i];
}
double rand = urandom(sum); //unsigned random (returns [0,sum])
sum = 0;
for (int i=0;i<2;i++) {
sum += weights[i];
if (rand < sum) {
return i;
}
}
我怎么能转换这偏向较低的价值?即我想在100个样本中,权重[0]样本被选择66%的时间;和33%的时间(即它们现在的倒数)加权[1]。进行全方位
手例如参考文献总和 - 权重[X]溶液
Original:
1 | 1 | 1%
20 | 21 | 20%
80 | 101 | 79%
Desired:
1 | ? | 79%
20 | ? | 20%
80 | ? | 1%
Now sum - weights[i]
100(101 - 1) | 100 | 50%
81(101 - 20) | 181 | 40%
21(101 - 80) | 202 | 10%
哦。 :-(哎呀,我应该通过更仔细的方式做到这一点 – Omnifarious 2010-10-23 08:59:32