This question already has answers here:
how to implement non uniform probability distribution?
(3个答案)
6年前关闭。
例如,我想从集合S = {0,1,2,3}中获得随机数。但是,现在每个数字都有不同的概率,比如{50%,30%,20%,10%},而不是每个数字都有相同的概率显示(25%)。
我该如何编码?在Java或C#中(我更喜欢C#)。
(3个答案)
6年前关闭。
例如,我想从集合S = {0,1,2,3}中获得随机数。但是,现在每个数字都有不同的概率,比如{50%,30%,20%,10%},而不是每个数字都有相同的概率显示(25%)。
我该如何编码?在Java或C#中(我更喜欢C#)。
最佳答案
到目前为止,别名方法是我最喜欢的方法。
http://code.activestate.com/recipes/576564-walkers-alias-method-for-random-objects-with-diffe/
我尚未审查此代码,但这是Google的最佳搜索结果。
这是另一个更好的解释
http://pandasthumb.org/archives/2012/08/lab-notes-the-a.html
实际上,我经常将这个问题用于面试,因为如果您从未见过它,那可能会令人感到困惑。
如果以上内容对您来说实在太难实现,那么可以通过输入解决方案进行一个简单的循环。
使用PHP,因为仅显示代码更容易。
function getNumberFromDistribution($dist) {
$totalProbability = 0;
$randomNumber = mt_rand(0, mt_getrandmax()) / mt_getrandmax(); //uniform random number between 0-1
foreach($dist as $number => $chance) {
if (($totalProbability += $chance) <= $randomNumber) {
return $number;
}
}
return null; //only reachable on bad input
}
09-05 22:14