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