生成加权随机数我试图设计一种(很好的)方法,从一个可能的数字范围中选择一个随机数,在这个范围内的每一个数都被赋予一个权重。简单地说:给定数字(0,1,2)的范围,选择一个0有80%的概率被选中的数字,1有10%的概率,2有10%的机会。我的大学统计课程已经过去8年了,所以你可以想象一下,目前我还没有找到合适的公式。这是我想出的“廉价和肮脏”的方法。此解决方案使用ColdFusion。你的语言可以用任何你喜欢的语言。我是个程序员,我想我能处理移植它。最终,我的解决方案需要使用Groovy-我是在ColdFusion中编写的,因为在CF中快速编写/测试很容易。public function weightedRandom( Struct options ) {
var tempArr = [];
for( var o in arguments.options )
{
var weight = arguments.options[ o ] * 10;
for ( var i = 1; i<= weight; i++ )
{
arrayAppend( tempArr, o );
}
}
return tempArr[ randRange( 1, arrayLen( tempArr ) ) ];}// test itopts = { 0=.8, 1=.1, 2=.1 };for( x = 1; x<=10; x++ ){
writeDump( weightedRandom( opts ) ); }我正在寻找更好的解决方案,请提出改进或替代方案。
3 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
添加回答
举报
0/150
提交
取消