我一直在努力寻找答案,但我发现的所有讨论都是用我不理解的语言,或者依赖于每个元素都有自己权重的集合。
我想基本上只得到一个介于0到10之间的随机数,这是“中等加权”,因为在5中经常出现的是0和10.基本上我一直试图找出一个算法,我可以给任何number是我定义的最小值和最大值之间的“加权数”,所有生成的数字都是适当加权的。我知道这可能听起来像“我不想想这个,我只是坐下来等待其他人这样做”,但我一直在思考和搜索这个一个小时,我真的迷路了:|
所以最后,我希望我可以打电话(通过扩展方法)
random.NextWeighted(MIN, MAX, WEIGHT);
答案 0 :(得分:4)
您有inverse normal distribution method可用。
缩放您的随机数,使其在0和1之间为双倍。
将其传递给InverseNormalDistribution。
根据权重缩放返回的值。 (例如,按重量除以100。)
计算[(MIN + MAX)/ 2] + [(ScaledValue)X(MAX - MIN)]
如果小于MIN,则返回MIN。如果它超过MAX,则返回MAX。否则,请返回此值。
答案 1 :(得分:3)
我不知道你想要5比0-10之间的其他数字更频繁出现,但是你可以用你想要的发行版创建一个数组。
像
这样的东西var dist = new []{0,1,2,3,4,5,6,7,8,9,10,5,5,5};
然后你得到0和13的随机位置,你会得到0-10之间的数字,但是比其他数字多5倍。如果你想要0到10亿之间的数字,那么速度很快但不太实用。