为了账号安全,请及时绑定邮箱和手机立即绑定

生成加权随机数

生成加权随机数

繁星coding 2019-07-11 10:18:39
生成加权随机数我试图设计一种(很好的)方法,从一个可能的数字范围中选择一个随机数,在这个范围内的每一个数都被赋予一个权重。简单地说:给定数字(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到1之间的随机数R。

若R in[0,0.1)->1

若R in[0.1,0.2)->2

若R in[0.2,1]->3

如果你不能直接得到一个介于0到1之间的数字,那么在一个范围内生成一个能产生任意精度的数字。例如,如果你有重量

(1,83.7%)及(2,16.3%),登记人数由1人增至1 000人。1-837是1.838-1000是2。


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 420 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信