例如,我想从集合 S = {0, 1, 2, 3} 中获取随机数。但现在每个数字都有不同的概率,而不是每个数字都有相同的显示概率(即 25%),比如说 {50%, 30%, 20%, 10%}。
我该如何编码?在 Java 或 C# 中(我更喜欢 C#)。
到目前为止,我最喜欢使用别名方法来执行此操作。
http://code.activestate.com/recipes/576564-walkers-alias-method-for-random-objects-with-diffe/ http://code.activestate.com/recipes/576564-walkers-alias-method-for-random-objects-with-diffe/
我还没有审查过这段代码,但它是谷歌的热门结果。
这是另一个更好的解释
http://pandasthumb.org/archives/2012/08/lab-notes-the-a.html 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)